Viacrozmerné polia v JavaScripte. Dvojrozmerné pole v jazyku JavaScript Javascriptové pole je viacrozmerné

V tomto článku sa pozrieme na štandardné numericky indexované polia JavaScriptu. Polia sú deklarované pomocou hranatých zátvoriek:

var ovocie = ["jablko", "pomaranč", "osol"]

Ak chcete extrahovať prvok, umiestnite jeho index do hranatých zátvoriek. Prvý index 0:

var ovocie = ["jablko", "pomaranč", "osol"] výstraha (ovocie) upozornenie (ovocie) upozornenie (ovocie)

Môžeme tiež získať dĺžku poľa JavaScript:

var fruit = ["Apple", "Orange", "Donkey"] upozornenie (fruit.length)

Ojoj! Vytvorili sme pole s dvoma plodmi a oslom. Teraz musíme odstrániť osla.

Pop a push metódy

Metóda pop v jazyku JavaScript odstráni prvok z poľa a vráti ho.

Nasledujúci príklad ukazuje, ako sa Donkey získava z poľa:

var fruit = ["Apple", "Orange", "Donkey"] upozornenie ("mazám" + fruit.pop ()) // Teraz máme iba upozornenie ["Apple", "Orange"] ("Teraz veľkosť poľa: „+ fruit.length) // somár odstránený

Všimnite si toho, že pop upravuje samotné pole.

Analógom popu je metóda push, ktorá pridáva položku do poľa. Napríklad sme zabudli pridať broskyňu:

var fruits = ["Apple", "Orange"] fruit.push ("Peach"); // teraz máme upozornenie [„Apple“, „Orange“, „Peach“] („Posledná položka:“ + ovocie)

  1. Vytvorte pole štýlov s prvkami „ Jazz”, “Blues”;
  2. Pridajte hodnotu " Rock'n'Roll«;
  3. Nahraďte druhú hodnotu od konca „ Klasika“. Mali by ste skončiť s poľom: „ Jazz”, ”Klasika”, ”Rock'n'Roll“. Kód by mal fungovať pre ľubovoľnú dĺžku poľa;
  4. Extrahujte poslednú hodnotu z poľa a upozornite ju.

Riešenie

// 1 var styles = ["Jazz", "Bluez"] // 2 styles.push ("Rock" n "Roll") // alebo: styles = "Rock" n "Roll" // 3 styles = "Classic "// 4 upozornenie (styles.pop ())

Metódy radenia / radenia

Metódy shift / unshift fungujú na konci poľa, ale na posun položiek nahor môžete použiť aj shift ( prvá hodnota poľa sa odstráni posunom prvkov). Metóda unshift umožňuje JavaScriptu pridať prvok do poľa od konca:

var fruit = ["Apple", "Orange"] var apple = fruit.shift () // teraz máme iba ["Orange"] fruit.unshift ("Lemon") // teraz máme ["Lemon", " Oranžová "] výstraha (ovocie.dĺžka) // 2

Shift aj unshift môžu pracovať na viacerých prvkoch súčasne:

var fruits = ["Apple"] fruit.push ("Orange", "Peach") fruits.unshift ("Pineapple", "Lemon") // teraz pole vyzerá takto: ["Pineapple", "Lemon", „Apple“, „Orange“, „Peach“]

Zadanie samoštúdia

Napíšte kód na zobrazenie náhodnej hodnoty z poľa arr prostredníctvom upozornenia:

var arr = ["Slivka", "Oranžová", "Osol", "Mrkva", "JavaScript"]

Poznámka: Kód na získanie náhodného čísla od minimálnej po maximálnu hodnotu (vrátane) je nasledujúci:

var rand = min + mat. podlaha (mat. random () * (max + 1-min))

Riešenie

Potrebujeme extrahovať náhodné číslo medzi 0 a arr.length-1 (vrátane):

var arr = ["Slivka", "Oranžová", "Osol", "Mrkva", "JavaScript"] var rand = Math.floor (Math.random () * arr.length) výstraha (arr)

Iterácia v poli

V JavaScripte sa iterácia cez pole vykonáva pomocou slučky for:

var ovocie = [„Ananás“, „Citrón“, „Jablko“, „Pomaranč“, „Broskyňa“] pre (var i = 0; i

Zadanie samoštúdia

Vytvorte funkciu find (arr, value), ktorá nájde hodnotu v danom poli a vráti jej index, alebo -1, ak nebola nájdená žiadna hodnota.

Napríklad:

arr = ["test", 2, 1,5, false] find (arr, "test") // 0 find (arr, 2) // 1 find (arr, 1,5) // 2 find (arr, 0) // -1

Riešenie

Možné riešenie môže vyzerať takto:

funkcia nájsť (pole, hodnota) (pre (var i = 0; i

To však nie je pravda, pretože == nerozlišuje rozdiel medzi 0 a nepravdou.

Správnejšie je použiť === pri práci s poľami v JavaScripte. Najnovší štandard ES5 navyše obsahuje funkciu Array # indexOf. S jeho pomocou môžeme definovať funkciu nasledovne:

funkcia find (pole, hodnota) (ak (array.indexOf) vráti pole.indexOf (hodnota) pre (var i = 0; i

Ešte inteligentnejšie by bolo definovať vyhľadávanie pomocou podmienky na kontrolu, či existuje metóda indexOf.

Zadanie samoštúdia

Vytvorte funkciu filterNumeric (arr), ktorá zaberá pole a vráti nové pole obsahujúce iba číselné hodnoty z arr.

Príklad, ako by to malo fungovať:

arr = ["a", 1, "b", 2]; arr = filterNumeric (arr); // teraz arr =

Riešenie

Riešením je preskočiť pole a pridať hodnoty do nového poľa, ak sú číselné.

pripojiť sa a rozdeliť

Niekedy potrebujete rýchly spôsob prevodu poľa JavaScript na reťazec. Na to slúži metóda spájania.

Spojí pole do reťazca pomocou zadaného oddeľovača:

var ovocie = ["Citrón", "Jablko", "Pomaranč", "Broskyňa"]; var str = fruit.join (","); alert (str);

Reverznú konverziu je možné ľahko vykonať pomocou metódy rozdelenia:

var ovocie = "Jablko, pomaranč, broskyňa"; var arr = fruits.split (","); // arr teraz obsahuje upozornenie ["Apple", "Orange", "Peach"] (arr);

Zadanie samoštúdia

Objekt obsahuje vlastnosť className, ktorá obsahuje názvy tried oddelené medzerami:

Napíšte funkciu addClass (obj, cls), ktorá pridá triedu cls, ale iba ak neexistuje:

ddClass (obj, "new") // obj.className = "otvoriť ponuku new" addClass (obj, "open") // žiadne zmeny (trieda už existuje) addClass (obj, "me") // obj.className = Upozornenie „otvoriť ponuku nové ja“ (obj.className) //

Riešenie

Musíte rozdeliť názov triedy a slučku na časti. Ak sa trieda nenájde, pridá sa.

Smyčka je mierne optimalizovaná na zvýšenie výkonu:

funkcia addClass (elem, cls) (pre (var c = elem.className.split (""), i = c.length-1; i> = 0; i--) (if (c [i] == cls ) return) elem.className + = "" + cls) var obj = (className: "open menu") addClass (obj, "new") addClass (obj, "open") alert (obj.className) // open menu Nový

Vo vyššie uvedenom príklade je premenná c definovaná na začiatku slučky a jej posledný index je nastavený na i.

Samotná slučka je spracovaná v opačnom smere, pričom končí podmienkou i> = 0. Pretože i> = 0 sa kontroluje rýchlejšie ako i. Čo v JavaScripte urýchľuje vyhľadávanie v poli.

Použitie dĺžky na orezanie poľa

Pomocou vlastnosti dĺžka môžete pole orezať takto:

Zadáte dĺžku a prehliadač pole skráti.

Pole je predmet, čo znamená

V JavaScripte je pole v skutočnosti objektom s automatickým nastavením dĺžky a špeciálnymi metódami.

To sa líši od konceptu v iných jazykoch, kde polia predstavujú súvislý segment pamäte. To sa tiež líši od prepojeného zoznamu založeného na fronte alebo zásobníku.

Numerické kľúče poľa

Kľúče sú čísla, ale môžu mať akékoľvek meno:

arr = arr = 5 arr.prop = 10 // nerob to

V JavaScripte sú polia hašovacími tabuľkami s ich výkonnostnými výhodami, ale aj nevýhodami.

Napríklad push / pop funguje iba na najvzdialenejších prvkoch poľa, takže sú neuveriteľne rýchle.

push funguje iba na konci:

var arr = ["Moje", "pole"] arr.push ("niečo") upozornenie (arr) // reťazec "pole"

Metódy shift / unshift sú pomalé, pretože vyžadujú prečíslovanie celého poľa. Metóda spájania môže tiež zmeniť číslovanie:

Radenie / radenie je teda pomalšie ako stlačenie / vysunutie. Čím je pole väčšie, tým dlhšie trvá zoradenie poľa v jazyku JavaScript.

Zadanie samoštúdia

Aký bude výsledok? Prečo?

arr = ["a", "b"] arr.push (function () (alert (this))) arr () //?

Riešenie

Pretože polia sú objekty, arr .. je vlastne volanie metódy objektu ako obj metóda:

arr () // rovnaké ako arr () // syntakticky nesprávne, ale koncepčne rovnaké: arr.2 () // prepísané rovnakým štýlom ako obj.method () this = arr v tomto prípade je odovzdané funkcii, takže obsah arr je na výstupe. arr = ["a", "b"] arr.push (function () (alert (this))) arr () // "a", "b", function

Riedke polia, popis dĺžky

Vlastnosť dĺžka vám umožňuje získať nie veľkosť poľa v jazyku JavaScript, ale posledný index + 1. To je dôležité, pokiaľ ide o riedke polia s „medzerami“ v indexoch.

V nasledujúcom príklade pridáme dva prvky do prázdneho ovocia, ale dĺžka zostáva 100:

var ovocie = // prázdne pole ovocia = ovocie „broskyňa“ = upozornenie „jablko“ (fruit.length) // 100 (v poli sú však iba 2 prvky)

Ak sa pokúsite vytvoriť riedke pole, prehliadač zobrazí chýbajúce indexy ako prázdne prvky:

var ovocie = // prázdne pole ovocia = ovocie „broskyňa“ = upozornenie „jablko“ (ovocie) //, broskyňa, jablko (alebo niečo podobné)

Pole je však objekt s dvoma kľúčmi. Chýbajúce hodnoty nezaberajú miesto.

Riedke polia sa správajú zvláštne, keď sú na ne aplikované metódy poľa. Netušia, že chýbajú indexy:

var ovocie = ovocie = ovocie „broskyňa“ = upozornenie „jablko“ (fruit.pop ()) // upozornenie „jablko“ (v indexe 9) (ovocie.pop ()) // vysunutie nezaradeného (v indexe 8) )

Skúste sa vyhnúť riedkym poliam. V každom prípade ich metódy nebudú fungovať správne. Namiesto toho použite Object.

Odstraňuje sa z poľa

Ako vieme, polia sú objekty, na vymazanie hodnoty by sme teda mohli použiť príkaz delete:

var arr = ["Choď", "do", "domov"] vymazať arr // teraz arr = ["Choď", nedefinované, "domov"] upozornenie (arr) // nenastavené

Môžete vidieť, že hodnota sa odstraňuje, ale nie tak, ako by sme chceli, pretože pole obsahuje nešpecifikovaný prvok.

Operátor vymazania vymaže pár kľúč-hodnota a je to. Prirodzene, pretože pole je iba hash, pozícia odstráneného prvku sa stáva nedefinovanou.

Častejšie musíme odstrániť prvok bez toho, aby medzi indexmi zostali „diery“. Existuje ďalšia metóda, ktorá nám s tým pomôže.

Splice metóda

Metóda spájania môže odstraňovať a nahrádzať prvky vo viacrozmerných poliach JavaScript. Jeho syntax je:

arr.splice (index, deleteCount [, elem1, ..., elemN])

Odstráni prvok deleteCount začínajúci na indexe a potom na svoje miesto vloží elem1, ..., elemN.

Pozrime sa na niekoľko príkladov:

var arr = ["Choď", "do", "domov"] arr.splice (1, 1) // odstráni 1 položku začínajúc od výstrahy indexu 1 (arr.join (",")) // ["Choď" , "domov"] (1 položka odstránená)

Týmto spôsobom môžete použiť zostrih na odstránenie jedného prvku z poľa. Čísla prvkov poľa sa posunú, aby vyplnili medzeru:

var arr = ["Choďte", "do", "domov"] arr.splice (0, 1) // odstráňte 1 prvok od indexu 0 výstraha (arr) // "do" sa stal prvým prvkom

Nasledujúci príklad ukazuje, ako nahradiť položky:

Metóda spájania vracia pole odstránených položiek:

var arr = ["Choď", "do", "domov", "teraz"]; // odstránenie prvých 2 položiek var remove = arr.splice (0, 2) upozornenie (odstránené) // "Choď", "do"<-- массив удаленных элементов splice может вставлять элементы, задайте 0 для deleteCount. var arr = ["Go", "to", "home"]; // со второй позиции // удаляем 0 // и вставляем "my", "sweet" arr.splice(2, 0, "my", "sweet") alert(arr) // "Go", "to", "my", "sweet", "home"

Táto metóda môže použiť aj negatívny index, ktorý sa počíta od konca poľa:

var arr = // pre prvok -1 (predposledný) // odstráni 0 prvkov, // a vloží 3 a 4 arr.splice (-1, 0, 3, 4) alert (arr) // 1,2,3, 4.5

Zadanie samoštúdia

Objekt obsahuje vlastnosť className, ktorá obsahuje názvy tried, oddelené medzerami:

var obj = (názov triedy: „otvorené menu“)

Napíšte funkciu removeClass (obj, cls), ktorá odstráni triedu cls, ak je zadaná:

removeClass (obj, "open") // obj.className = "menu" removeClass (obj, "blabla") // žiadne zmeny (neexistuje trieda na odstránenie)

Riešenie

Musíte rozdeliť className na časti a spojiť tieto časti. Ak sa nájde zhoda, odstráni sa z poľa objektov JavaScript a potom sa pripojí späť na koniec.

Poďme to trochu optimalizovať:

funkcia removeClass (elem, cls) (pre (var c = elem.className.split (""), i = c.length-1; i> = 0; i--) (if (c [i] == cls ) c.splice (i, 1)) elem.className = c.join ("")) var obj = (className: "open menu") removeClass (obj, "open") removeClass (obj, "blabla") alert (obj.className) // ponuka

Vo vyššie uvedenom príklade je c nastavené na začiatku cyklu a i je nastavené na jeho posledný index.

Samotná slučka prebieha v opačnom smere a končí podmienkou i> = 0. Dôvodom je, že i> = 0 sa testuje rýchlejšie ako i. Čo urýchľuje hľadanie nehnuteľnosti v c.

Metóda rezu

Časť poľa môžete extrahovať pomocou metódy slice (begin [, end]): var arr = ["Why", "learn", "JavaScript"]; var arr2 = arr.slice (0,2) // preberá 2 prvky začínajúce na výstrahe 0 (arr2.join (",")) // "Prečo, učiť sa"

Všimnite si toho, že táto metóda nemení počet prvkov v poli v JavaScripte, ale kopíruje jeho časť.

Druhý argument môžete vynechať, aby všetky prvky začínali na konkrétnom indexe:

var arr = ["Prečo", "učiť sa", "JavaScript"]; var arr2 = arr.slice (1) // akceptuje všetky prvky začínajúce 1 upozornením (arr2.join (",")) // "učiť sa, JavaScript"

Metóda podporuje negatívne indexy, rovnako ako reťazec # slice.

Reverzná metóda

Ďalšou užitočnou metódou je reverz. Predpokladajme, že chcem získať poslednú časť domény, napríklad „“ com"Od" my.site.com“. Takto to môžete urobiť:

var doména = "my.site.com" var last = doména.split ("."). upozornenie na spätné () (posledné)

Polia JavaScript podporujú komplexnú syntax (reverzné ()) na vyvolanie metódy a potom načítanie prvku z výsledného poľa.

Môžete uskutočňovať dlhšie hovory ako reverzný () 0] arr.sort () alert (arr) // 1, 15, 2

Spustite vyššie uvedený kód. Získate objednávku 1, 15, 2. Dôvodom je, že metóda prevádza všetko na reťazec a používa predvolené lexikografické poradie.

V predchádzajúcom článku sme si povedali, čo to je a ako s tým pracovať. V tomto článku budeme hovoriť o viacrozmerné pole.

Je to pole, ktoré má jeden alebo viac prvkov, ktoré sú tiež poliami. V závislosti od hĺbky reklamy sa môže zobrazovať najmä dvojrozmerné pole(2 úrovne) buď trojrozmerné pole(3 úrovne) buď štvorrozmerné(4 úrovne) a tak ďalej.

Najpopulárnejšie po jednorozmernom poli, ktoré sa najčastejšie používa, je dvojrozmerné pole. Budeme to študovať podrobnejšie.


Ako vidíte, prvky dvojrozmerného poľa sú jednorozmerné polia. Ak by tieto jednorozmerné polia obsahovali viac polí, potom by pole arr už bolo trojrozmerné.

Ako príklad vytvoríme tri jednoduché polia a naplníme ich údajmi. Prvý naplníme párnymi číslami, druhý nepárnymi číslami a tretí niekoľkými ľubovoľnými údajmi.

// Deklarujte tri prázdne polia var evenNumbers = new Array (); // Premenná k - pre indexy polí evenNumbers var k = 0; var nepárneČísla = nové pole (); // premenná n - pre indexy polí nepárne čísla var n = 0; var data = new Array ("auto", "lietadlo", true, 89, "m"); // Vyplňte pole evenNumbers párnymi číslami pre (var i = 1; i

Aby ste videli, čo je v poli, môžete použiť taký nástroj ako konzola.

Napríklad chceme vidieť obsah poľa s nepárnymi číslami nepárne čísla. Za týmto účelom napíšte do nižšie uvedeného kódu nasledujúci riadok:

Console.log (oddNumbers);

Ak chcete vidieť výsledok, musíte otvoriť konzola v prehliadači... V prehliadači Google Chrome sa to robí takto: kliknite pravým tlačidlom myši na stránku a v kontextovej ponuke vyberte poslednú možnosť „Zobraziť kód“, tj. V anglickej verzii sa táto možnosť nazýva Inspect.


A nižšie sa zobrazí panel nástrojov pre vývojárov. V ňom musíte prejsť na kartu Konzola.


Teraz, aby sa vytvorte dvojrozmerné pole, Musíte to deklarovať a pridať k tomu jednorozmerné polia, ktoré ste vytvorili vyššie.

// Deklarujte dvojrozmerné pole twoDimens a vyplňte ho var twoDimens = nové pole (párne čísla, nepárne čísla, údaje); console.log (twoDimens);

Pozrime sa na obsah tohto poľa v konzole.


iterácia v dvojrozmernom poli

Najprv sa poučme ako získať prístup k prvkom dvojrozmerného poľa.

Rovnako ako pre jednotlivé polia sú prvky prístupné podľa ich indexov.

Poďme napríklad zobraziť prvok v indexe 3 z poľa s nepárnymi číslami (nepárne čísla). Index jednorozmerného poľa nepárne čísla v dvojrozmernom poli twoDimens je jeden (1).

Document.write ("Prvok s indexom 3 z poľa nepárnych čísel nepárne čísla je:" + dveDimény); // Element: 7

V poli twoDimens odkazujeme na prvok v indexe 1. Prvkom v tomto indexe je pole nepárne čísla. A v tomto poli už pristupujeme k prvku s indexom 3, ktorý je číslom 7.

Prejdime teraz k samotnej otázke ako iterovať v dvojrozmernom poli.

Slučka cez dvojrozmerné pole sa vykonáva pomocou dvojitej slučky. Pozrime sa napríklad na iteráciu nášho poľa twoDimens.

Pre (var i = 0; i< twoDimens.length; i++){ for(var j = 0; j < twoDimens[i].length; j++){ document.write("

Prvok s indexom " + i +" " + j +" rovná sa: " + dvaDimens [i] [j] +"

"); } }

V prvej slučke iterujeme samotné pole twoDimens. V druhej slučke už iterujeme samotný prvok (pole). Po prvé, premenná i sa rovná 0. Preto v druhej slučke najskôr iterujeme cez prvé pole evenNumbers, ktoré má index 0. A už v rámci druhej slučky pristupujeme k prvkom tohto poľa. Teda: twoDimens [j]. Kde j sa pohybuje od 0 do dĺžky poľa evenNumbers.

Po iterácii prvkov z prvého poľa sa vrátime do prvej slučky, zvýšime premennú i a pokračujeme v iterácii cez druhé pole oddNumbers, ktoré má index 1. A tak iterujeme nad každým prvkom dvojrozmerného poľa dve dimenzie.

Teraz sa pozrime na výsledok tohto vyhľadávania:


To je všetko, o čom som chcel v tomto článku hovoriť. Teraz viete, ako vytvoriť dvojrozmerné pole, ako pristupovať k prvkom dvojrozmerného poľa a ako iterovať v dvojrozmernom poli. Dúfam, že bolo všetko jasné. Prajem vám veľký úspech!

Polia

Array je usporiadaná zbierka hodnôt. Hodnoty v poli sa nazývajú prvky a každý prvok je charakterizovaný číselnou polohou v poli, ktorá sa nazýva index. Polia v JavaScripte sú bez typu: prvky poľa môžu byť akéhokoľvek typu a rôzne prvky toho istého poľa môžu byť rôznych typov. Prvkami poľa môžu byť dokonca aj objekty alebo iné polia, čo vám umožní vytvárať komplexné dátové štruktúry, ako sú polia objektov a polia polí.

Indexy polí v JavaScripte sú založené na nule a používajú 32-bitové celé čísla-prvý prvok poľa má index 0. Polia JavaScript sú dynamické: môžu sa podľa potreby zväčšovať a zmenšovať; nie je potrebné deklarovať pevné veľkosti polí pri ich vytváraní ani opätovne alokovať pamäť pri zmene veľkosti.

Polia v JavaScripte sú špecializovanou formou objektov a indexy polí neznamenajú viac než len názvy vlastností, ktoré sú zhodou okolností celé čísla.

Vytváranie polí

Pole najľahšie vytvoríte pomocou literálu, čo je jednoduchý zoznam prvkov poľa oddelených čiarkami v hranatých zátvorkách. Hodnoty v literáli poľa nemusia byť konštanty - môžu to byť akékoľvek výrazy vrátane objektových literálov:

Var prázdny =; // Prázdne pole var numbers =; // Pole s piatimi číselnými prvkami var misc = [1.1, true, "a",]; // 3 prvky rôznych typov + koncová čiarka var base = 1024; var tabuľka =; // Pole s premennými var arrObj = [,]; // 2 polia vo vnútri obsahujúce objekty

Doslovná syntax poľa vám umožňuje vložiť voliteľnú koncovú čiarku, t.j. doslovný [,] porovnáva pole s dvoma prvkami, nie s tromi.

Ďalším spôsobom, ako vytvoriť pole, je zavolať konštruktora Pole ()... Konštruktora je možné zavolať tromi rôznymi spôsobmi:

    Zavolajte konštruktora bez argumentov:

    Var arr = nové pole ();

    V tomto prípade sa vytvorí prázdne pole ekvivalentné doslovnému.

    Zavolajte konštruktor jediným číselným argumentom určujúcim dĺžku poľa:

    Var arr = nové pole (10);

    V takom prípade sa vytvorí prázdne pole zadanej dĺžky. Túto formu volania konštruktéra Array () je možné použiť na predbežné pridelenie pamäte pre pole, ak je vopred známy počet jeho prvkov. Všimnite si toho, že toto neukladá žiadne hodnoty do poľa.

    Vo výzve konštruktora explicitne zadajte hodnoty prvých dvoch alebo viacerých prvkov poľa alebo jedného nečíselného prvku:

    Var arr = nové pole (5, 4, 3, 2, 1, "test");

    V tomto prípade sa argumenty konštruktora stanú hodnotami prvkov nového poľa. Použitie literálov poľa je takmer vždy jednoduchšie ako použitie konštruktora Array () týmto spôsobom.

Čítanie a zápis prvkov poľa

K prvkom poľa je prístup pomocou operátora. Naľavo od zátvoriek musí byť odkaz na pole. Ľubovoľný výraz, ktorý vracia nezápornú celočíselnú hodnotu, musí byť v zátvorkách. Táto syntax je vhodná na čítanie aj na zápis hodnoty prvku poľa. Preto sú platné všetky nasledujúce vyhlásenia JavaScriptu:

// Vytvorenie poľa s jedným prvkom var arr = ["world"]; // Prečítajte si položku 0 var value = arr; // Zapíš hodnotu do prvku 1 arr = 3,14; // Zapíš hodnotu do prvku 2 i = 2; arr [i] = 3; // Napíšte hodnotu prvku 3 arr = "ahoj"; // Prečítajte položky 0 a 2, napíšte hodnotu k položke 3 arr] = arr;

Pripomeniem, že polia sú špecializovaným druhom predmetov. Hranaté zátvorky používané na prístup k prvkom poľa pôsobia presne rovnako ako hranaté zátvorky používané na prístup k vlastnostiam objektu. Tlmočník JavaScript prevádza číselné indexy v zátvorkách na reťazce - index 1 sa stáva reťazcom „1“ - a potom reťazce používa ako názvy vlastností.

Na prevode číselných indexov na reťazce nie je nič zvláštne: to isté možno urobiť s bežnými objektmi:

Var obj = (); // Vytvorte jednoduchý objekt obj = "one"; // Indexujte ho celými číslami

Zvláštnosťou polí je, že pri použití názvov vlastností, ktoré nie sú zápornými celými číslami, polia automaticky určujú hodnotu vlastnosti dĺžka... Napríklad pole arr bolo vytvorené vyššie s jediným prvkom. Potom boli jeho prvkom priradené hodnoty s indexmi 1, 2 a 3. V dôsledku týchto operácií sa hodnota vlastnosti dĺžka poľa zmenila a stala sa rovnou 4.

Mali by ste jasne rozlišovať medzi indexmi v názve poľa a názvov vlastností objektu. Všetky indexy sú názvami vlastností, ale iba vlastnosti s celočíselnými názvami sú indexmi. Všetky polia sú objekty a môžete k nim pridať vlastnosti s ľubovoľným názvom. Ak sa však dotknete vlastností, ktoré sú indexmi polí, polia reagujú aktualizáciou hodnoty vlastnosti dĺžka podľa potreby.

Ako indexy polí sú povolené záporné a celé čísla. V tomto prípade sa čísla prevedú na reťazce, ktoré sa používajú ako názvy vlastností.

Pridávanie a odstraňovanie prvkov poľa

Už sme videli, že najľahším spôsobom pridávania prvkov do poľa je priraďovanie hodnôt novým indexom. Túto metódu môžete použiť aj na pridanie jedného alebo viacerých prvkov na koniec poľa tlačiť ():

Var arr =; // Vytvorte prázdne pole arr.push ("zero"); // Pridajte hodnotu na koniec arr.push ("one", 2); // Pridajte ďalšie dve hodnoty

Element môžete pridať aj na koniec poľa priradením hodnoty prvku arr. Na vloženie prvku na začiatok poľa môžete použiť túto metódu zrušiť posun () a existujúce prvky v poli sa posunú k vyšším indexom.

Prvky poľa môžete odstrániť pomocou operátora vymazania, podobne ako bežné vlastnosti objektov:

Var arr =; vymazať arr; 2 v zábere; // false, index 2 v poli je nedefinovaný arr.length; // 3: operátor delete nezmení vlastnosť dĺžka poľa

Odstránenie prvku je podobné (ale mierne odlišné) priradenie nedefinovanej hodnoty tomuto prvku. Všimnite si toho, že použitie operátora delete na prvok v poli nemení hodnotu vlastnosti length ani neposúva prvky s vyšším indexom nadol, aby vyplnil prázdne miesto, ktoré zostalo po vymazaní prvku.

Okrem toho je možné odstrániť prvky na konci poľa jednoduchým priradením novej hodnoty vlastnosti length. Polia majú svoju metódu pop ()(opak k push ()), čo zníži dĺžku poľa o 1 a vráti hodnotu odstráneného prvku. Existuje aj metóda smena ()(oproti unshift ()), ktorý odstráni prvok na začiatku poľa. Na rozdiel od operátora vymazania, metóda shift () posúva všetky prvky o jednu pozíciu nižšie pod ich aktuálne indexy.

Nakoniec existuje viacúčelová metóda spojka (), ktorý vám umožňuje vkladať, odstraňovať a nahrádzať prvky polí. Mení hodnotu vlastnosti length a podľa potreby posúva prvky poľa s nižšími alebo vyššími indexmi. O všetkých týchto metódach budeme diskutovať o niečo neskôr.

Viacrozmerné polia

JavaScript nepodporuje „skutočné“ viacrozmerné polia, ale je dobré ich napodobniť pomocou polí z polí. Na prístup k dátovej položke v rade polí stačí použiť operátor dvakrát.

Predpokladajme napríklad, že matica premenných je pole polí čísel. Každý prvok matice [x] je radom čísel. Na prístup k určitému číslu v poli môžete použiť maticu výrazov [x] [y]. Nasleduje konkrétny príklad, kde sa ako multiplikačná tabuľka používa dvojrozmerné pole:

// Vytvorenie viacrozmerného poľa var tabuľka = nové pole (10); // V tabuľke je 10 riadkov pre (var i = 0; i

Metódy triedy polí

Štandard ECMAScript 3 definuje mnoho praktických funkcií pre prácu s poľami ako súčasť Array.prototype, ktoré sú k dispozícii ako metódy akéhokoľvek poľa. Tieto metódy budú predstavené v nasledujúcich podsekciách.

Metóda join ()

Metóda Array.join () skonvertuje všetky prvky v poli na reťazce, zreťazí ich a vráti výsledný reťazec. Voliteľný argument možno metóde odovzdať pomocou reťazca, ktorý sa použije na oddelenie prvkov vo výslednom reťazci. Ak nie je zadaný žiadny oddeľovač, použije sa čiarka. Nasledujúci úryvok napríklad poskytne reťazec „1,2,3“:

Var arr =; arr.join (); // "1,2,3" arr.join ("-"); // "1-2-3"

Metóda reverse ()

Metóda Array.reverse () obráti poradie prvkov v poli a vráti zoradené pole. Permutácia sa vykonáva priamo na pôvodnom poli, t.j. táto metóda nevytvorí nové pole s preskupenými prvkami, ale zmení ich poradie v už existujúcom poli. Napríklad nasledujúci úryvok, ktorý používa metódy reverse () a join (), má za následok reťazec „3,2,1“:

Var arr =; arr.reverse (). join (); // "3,2,1"

Metóda triedenia ()

Metóda Array.sort () triedi prvky v pôvodnom poli a vráti zoradené pole. Ak sa volá metóda sort () bez argumentov, triedenie sa vykoná podľa abecedy (na porovnanie sa položky v prípade potreby dočasne prevedú na reťazce). Nedefinované prvky sú zalomené na koniec poľa.

Porovnávaciu funkciu môžete odovzdať ako argument na triedenie () na zoradenie v akomkoľvek inom neabecednom poradí. Táto funkcia určuje, ktorý z jej dvoch argumentov by mal byť v zoradenom zozname na prvom mieste. Ak musí prvý argument predchádzať druhému, porovnávacia funkcia musí vrátiť záporné číslo. Ak má prvý argument nasledovať po druhom v triedenom poli, potom musí funkcia vrátiť číslo väčšie ako nula. A ak sú tieto dve hodnoty ekvivalentné (t. J. Ich poradie nie je dôležité), porovnávacia funkcia by mala vrátiť 0:

Var arr =; arr.sort (); // Abecedné poradie: 1111, 222, 33, 4 arr.sort (funkcia (a, b) (// Číselné poradie: 4, 33, 222, 1111 vráti ab; // Vráti hodnotu 0 // v závislosti od zoradenia poradie a a b)); // Zoradenie dozadu, od najvyššieho po najnižšie arr.sort (funkcia (a, b) (návrat b-a));

Všimnite si, aké pohodlné je použiť v tomto úryvku funkciu bez názvu. Porovnávacia funkcia sa používa iba tu, takže nie je potrebné jej dávať názov.

Metóda concat ()

Metóda Array.concat () vytvorí a vráti nové pole obsahujúce prvky pôvodného poľa, na ktorom bola metóda concat () volaná, a hodnoty všetkých argumentov odovzdané metóde concat (). Ak je niektorý z týchto argumentov sám poľom, jeho prvky sa pridajú do vráteného poľa. Je však potrebné poznamenať, že neexistuje žiadna rekurzívna konverzia poľa z polí na jednorozmerné pole. Metóda concat () nemení pôvodné pole. Nasleduje niekoľko príkladov:

Var arr =; arr.concat (4, 5); // Vráti arr.concat (); // Vráti arr.concat (,) // Vráti arr.concat (4,]) // Vracia]

Slice () metóda

Metóda Array.slice () vracia segment alebo podoblast zadaného poľa. Dva argumenty metódy definujú začiatok a koniec vráteného bloku. Vrátené pole obsahuje prvok očíslovaný v prvom argumente plus všetky nasledujúce prvky až po (ale nezahŕňa) prvok očíslovaný v druhom argumente.

Ak je zadaný iba jeden argument, vrátené pole obsahuje všetky prvky od počiatočnej polohy po koniec poľa. Ak je niektorý z argumentov záporný, určuje číslo prvku vzhľadom na koniec poľa. Argument -1 teda zodpovedá poslednému prvku poľa a argument -3 zodpovedá tretiemu prvku poľa od konca. Tu je niekoľko príkladov:

Var arr =; arr.slice (0,3); // Vráti arr.slice (3); // Vráti arr.slice (1, -1); // Vráti arr.slice (-3, -2); // Vráti sa

Splice () metóda

Metóda Array.splice () je generická metóda, ktorá vkladá alebo odstraňuje prvky z poľa. Na rozdiel od metód slice () a concat (), metóda splice () upravuje pôvodné pole, na ktorom bolo volané. Všimnite si toho, že metódy splice () a slice () majú veľmi podobné názvy, ale vykonávajú úplne odlišné operácie.

Metóda splice () môže odstraňovať prvky z poľa, vkladať nové prvky alebo robiť oboje súčasne. Prvky poľa sú podľa potreby posunuté tak, aby sa po vložení alebo vymazaní vytvorila súvislá sekvencia.

Prvý argument metódy splice () určuje pozíciu v poli, z ktorej sa má vložiť a / alebo odstrániť. Druhý argument určuje počet prvkov, ktoré sa majú z poľa odstrániť (vystrihnúť). Ak druhý argument vynecháte, odstránia sa všetky prvky poľa zo zadaného poľa do konca poľa. Metóda splice () vracia pole odstránených prvkov alebo (ak nebol odstránený žiadny z prvkov) prázdne pole.

Prvé dva argumenty metódy splice () určujú prvky poľa, ktoré sa majú odstrániť. Za týmito argumentmi môže nasledovať ľubovoľný počet ďalších argumentov určujúcich prvky, ktoré sa majú vložiť do poľa, začínajúc od polohy uvedenej v prvom argumente.

Var arr =; arr.splice (4); // Vráti arr = arr.splice (1,2); // Vráti arr = arr.splice (1,1); // Vráti sa; arr = arr =; arr.splice (2,0, "a", "b"); // Vráti sa; arr =

Metódy push () a pop ()

Metódy push () a pop () vám umožňujú pracovať s poľami, ako sú zásobníky. Metóda push () pridá jeden alebo viac nových prvkov na koniec poľa a vráti jeho novú dĺžku. Metóda pop () vykonáva opačnú operáciu - odstráni posledný prvok poľa, zmenší dĺžku poľa a vráti hodnotu, ktorú odstránil. Všimnite si toho, že obe tieto metódy upravujú pôvodné pole, a nie vytvárajú jeho upravenú kópiu.

Metódy unshift () a shift ()

Metódy unshift () a shift () sa správajú podobne ako push () a pop (), ibaže vkladajú a odstraňujú prvky na začiatku poľa, nie na konci. Metóda unshift () posúva existujúce prvky k väčším indexom, aby uvoľnila miesto, pridá prvok alebo prvky na začiatok poľa a vráti novú dĺžku poľa. Metóda shift () odstráni a vráti prvý prvok poľa a posunie všetky nasledujúce prvky o jednu pozíciu nadol, aby obsadil priestor uvoľnený na začiatku poľa.

Posledná aktualizácia: 09.04.2018

Polia sú určené na prácu s množinami údajov. Na vytvorenie poľa sa používa výraz new Array ():

Var myArray = nové pole ();

Existuje aj kratší spôsob inicializácie poľa:

Var myArray =;

V tomto prípade vytvárame prázdne pole. Môžete však doň pridať aj počiatočné údaje:

Var people = ["Tom", "Alice", "Sam"]; console.log (ľudia);

V tomto prípade budú v myArray tri prvky. Graficky to možno znázorniť nasledovne:

Indexy sa používajú na označenie jednotlivých prvkov poľa. Počítanie začína od nuly, to znamená, že prvý prvok bude mať index 0 a posledný bude mať index 2:

Var people = ["Tom", "Alice", "Sam"]; console.log (ľudia); // Tom var person3 = ľudia; // Sam console.log (person3); // Sam

Ak sa pokúsime získať prístup k prvku v indexe väčšom ako je veľkosť poľa, dostaneme nedefinované:

Var people = ["Tom", "Alice", "Sam"]; console.log (ľudia); // nedefinované

V indexe sú tiež nastavené hodnoty pre prvky poľa:

Var people = ["Tom", "Alice", "Sam"]; console.log (ľudia); // Tom people = "Bob"; console.log (ľudia); // Bob

Navyše, na rozdiel od iných jazykov, ako je C # alebo Java, môžete nainštalovať prvok, ktorý nebol pôvodne nainštalovaný:

Var people = ["Tom", "Alice", "Sam"]; console.log (ľudia); // nedefinované - v poli ľudia sú iba tri prvky = "Bob"; console.log (ľudia); // Bob

Je tiež potrebné poznamenať, že na rozdiel od mnohých programovacích jazykov v JavaScripte nie sú polia silne napísané, do jedného poľa je možné uložiť údaje rôznych typov:

Objekty Var = = "" Tom ", 12, pravda, 3,14, nepravda]; console.log (objekty);

prevádzkovateľ nátierky

Operátor spread ... vám umožňuje vziať hodnoty z poľa oddelene:

Nech čísla =; console.log (... čísla); // 1 2 3 4 console.log (čísla); //

Pred poľom je určený operátor spread. Výsledkom je, že výraz ... čísla vráti množinu čísel, ale nebude to pole, ale jednotlivé hodnoty.

Viacrozmerné polia

Polia môžu byť jednorozmerné a viacrozmerné. Každý prvok vo viacrozmernom poli môže byť samostatným poľom. Vyššie sme uvažovali o jednorozmernom poli, teraz vytvoríme viacrozmerné pole:

Čísla varov1 =; // jednorozmerné pole var numbers2 = [,]; // dvojrozmerné pole

Vizuálne môžu byť obe polia reprezentované nasledovne:

Jednorozmerné čísla polí1

Na získanie jedného prvku poľa sa používa aj index:

Var tomInfo = ľudia;

Až teraz bude premenná tomInfo predstavovať pole. Aby sme dostali prvok do vnoreného poľa, musíme použiť jeho druhý rozmer:

Console.log ("Meno:" + ľudia); // Tom console.log ("Vek:" + ľudia); // 25

To znamená, že ak dokážeme vizuálne reprezentovať dvojrozmerné pole vo forme tabuľky, prvok people bude odkazovať na bunku tabuľky, ktorá sa nachádza na priesečníku prvého riadka a druhého stĺpca (prvá dimenzia je 0 - riadok, druhá dimenzia - 1 - stĺpec).

Môžeme tiež splniť úlohu:

Var people = [["Tom", 25, false], ["Bill", 38, true], ["Alice", 21, false]]; ľudia = 56; // priradenie samostatnej hodnoty console.log (people); // 56 ľudí = ["Bob", 29, nepravda]; // priradenie poľa console.log (people); // Bob

Pri vytváraní viacrozmerných polí nie sme obmedzení iba na dvojrozmerné polia, ale môžeme použiť aj polia veľkých rozmerov:

Čísla varov =; čísla =; // teraz cisla su dvojrozmerne polia cisla =; // teraz čísla sú trojrozmerné čísla polí = 5; // prvý prvok 3D poľa je 5 console.log (čísla);

Zdravím všetkých, ktorých zaujíma viacrozmerné pole a triedenie JavaScript. V aktuálnej publikácii sa pokúsim pokryť túto tému vo všetkých podrobnostiach.

Po prečítaní tohto článku sa preto dozviete, prečo sa vo webových aplikáciách používajú viacrozmerné polia, ako sa vytvárajú a ako sa s nimi dá manipulovať a triediť. Poďme sa pustiť do učenia!

Ako sú vytvárané viacrozmerné polia a na čo slúžia?

Na začiatok je potrebné pripomenúť si, ako sa vytvára pravidelné jednorozmerné pole.

var pole =

Teraz si pamätajte, že viacrozmerné pole je pole polí. Súhlasím, znie to ako tautológia. Prečítajte si však definíciu ešte raz. Multidimenzionálne pole skutočne pozostáva z určitého počtu vnorených.

Zvážte nasledujúcu situáciu. Na začiatku hry používateľ zadá svoje meno a po skončení sa na obrazovke zobrazí hodnotiaca tabuľka s menami hráčov a ich záznamami.

Je zrejmé, že takéto informácie sú uložené v databáze. Keď ho ale vytiahneme z databázy, dostaneme viacrozmerné pole. Koniec koncov, každý podoblast obsahuje prihlasovacie údaje hráča a počet získaných bodov.

Všetko to bude vyzerať takto:

var results = [["Markus", 333], ["Natasha", 211], ["Alexey", 124]];

Ako vidíte, informácie môžu byť uložené heterogénne. Môžu to byť reťazce, čísla a dokonca aj. Je to možné, pretože polia v sú nezadané.

V tomto prípade prístup k prvkom prebieha prostredníctvom dvojitého operátora.

Na konsolidáciu materiálu analyzujte malý program.

Výsledky =

Polia sú celkom pohodlný spôsob ukladania objednaných komplexných údajov pri ich spracovaní. Navyše je veľmi výhodné s nimi pracovať a zároveň je rýchlosť ich spracovania dosť vysoká.

Metódy triedenia údajov

Pre polia v JavaScripte existuje vstavaná metóda tzv triediť ()... Tento nástroj je veľmi flexibilný. A teraz vysvetlím prečo.

Ak použijete metódu bez parametrov, automaticky zoradí podskupiny podľa prvého prvku v abecednom poradí. Takže pri telefonovaní výsledky.triediť () analyzovaný objekt bude vyzerať takto:

Alexey, 124

Markus, 333

Natasha, 211

A ak vymeníte prvky v každom vnorenom poli, získate:

124, Alexey

211, Natasha

333, Markus

V tomto prípade sú na porovnanie všetky prvky dočasne prevedené na reťazce.

Ak na vyriešenie konkrétnej úlohy potrebujete funkciu, ktorá triedi prvky neštandardným spôsobom, môžete ju napísať sami a odovzdať ju ako parameter triediť ()... Malo by sa pamätať na to, že vlastná funkcia sa musí vrátiť:

  • kladné číslo (spravidla zvoľte 1), ak prvá špecifikovaná položka nasleduje za druhou v porovnaní;
  • záporné číslo (zvyčajne -1), ak by druhá vybraná položka mala nasledovať po prvej;
  • nula, ak sú dve testované hodnoty rovnaké.

Ako príklad si vezmime počiatočné pole výsledky zoradiť podľa bodov. Okrem toho budú výsledky zoradené od najvyššieho po najnižšie. To je možné vykonať dvoma spôsobmi.

V prvej verzii som zmenil logiku triedenia, t.j. v situácii, keď je potrebné vrátiť kladné číslo, vrátim záporné číslo a naopak.

Tabuľka záznamov:

Ale pri druhej metóde som ponechal logiku triedenia nedotknutú, ale navyše som použil inú metódu - obrátiť ()... Ako naznačuje názov, reverz obráti poradie prvkov.

Preto funkcia sort () bude vyzerať takto:

1 2 3 4 5 funkcia RecordSort (a, b) (ak (a> b) vráti 1; inak ak (a< b) return -1; else return 0; }

funkcia RecordSort (a, b) (ak (a> b) vráti 1; inak ak (a< b) return -1; else return 0; }

Potom pridáme vyššie uvedenú metódu.

Záver sa robí podobným spôsobom.

Chcem vás upozorniť na jeden dôležitý bod. Pri použití týchto funkcií nastanú všetky zmeny v poli, na ktoré ich použijete. Ak teda potrebujete zachovať pôvodnú formu údajov, vytvorte kópiu a potom ju upravte.

Tak som hovoril o viacrozmerných poliach a ich triedení. Ak sa vám článok páčil, prihláste sa na odber blogu a prečítajte si ďalšie rovnako zaujímavé publikácie. Bol by som vďačný za reposty. Dobudúcna!

Zbohom!

S pozdravom Roman Chueshov