Vícerozměrná pole v JavaScriptu. Dvourozměrné pole v jazyce JavaScript Javascriptové pole vícerozměrné

V tomto článku se podíváme na standardní numericky indexovaná pole JavaScriptu. Pole jsou deklarována pomocí hranatých závorek:

var fruit = ["Apple", "Orange", "Donkey"]

Chcete -li extrahovat prvek, umístěte jeho index do hranatých závorek. První index 0:

var fruit = ["Apple", "Orange", "Donkey"] upozornění (ovoce) upozornění (ovoce) upozornění (ovoce)

Můžeme také získat délku pole JavaScript:

var fruit = ["Apple", "Orange", "Donkey"] upozornění (fruit.length)

Jejda! Vytvořili jsme pole se dvěma plody a oslem. Nyní musíme odstranit osla.

Pop a push metody

Metoda pop v JavaScriptu odebere prvek z pole a vrátí jej.

Následující příklad ukazuje, jak je Donkey získán z pole:

var fruit = ["Apple", "Orange", "Donkey"] upozornění ("mazám" + fruit.pop ()) // Nyní máme pouze upozornění ["Apple", "Orange"] ("Nyní velikost pole: "+ fruit.length) // osel odstraněn

Všimněte si, že pop upravuje samotné pole.

Analogem popu je metoda push, která přidává položku do pole. Například jsme zapomněli přidat broskev:

var fruit = ["Apple", "Orange"] fruit.push ("Peach"); // nyní máme upozornění ["Apple", "Orange", "Peach"] ("Poslední položka:" + ovoce)

  1. Vytvořte pole stylů s prvky „ Jazz”, “Blues”;
  2. Přidejte hodnotu " Rock'n'Roll«;
  3. Nahraďte druhou hodnotu od konce „ Klasický". Měli byste skončit s polem: „ Jazz”, ”Klasický”, ”Rock'n'Roll“. Kód by měl fungovat pro libovolnou délku pole;
  4. Extrahujte poslední hodnotu z pole a upozorněte ji.

Řešení

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

Shift / unshift methods

Metody shift / unshift fungují na konci pole, ale můžete také použít shift k posunu položek nahoru ( první hodnota pole je odstraněna s posunem prvků). Metoda unshift umožňuje JavaScriptu přidat prvek do pole od konce:

var fruit = ["Apple", "Orange"] var apple = fruit.shift () // nyní máme pouze ["Orange"] fruit.unshift ("Lemon") // nyní máme ["Lemon", " Oranžová "] výstraha (fruit.length) // 2

Shift i unshift mohou fungovat na více prvcích současně:

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

Samostudium

Napište kód pro zobrazení náhodné hodnoty z pole arr prostřednictvím upozornění:

var arr = ["Švestka", "Oranžová", "Osel", "Mrkev", "JavaScript"]

Poznámka: Kód pro získání náhodného čísla od minimální po maximální hodnotu (včetně) je následující:

var rand = min + Math.floor (Math.random () * (max + 1-min))

Řešení

Potřebujeme extrahovat náhodné číslo mezi 0 a arr.length-1 (včetně):

var arr = ["Plum", "Orange", "Donkey", "Carrot", "JavaScript"] var rand = Math.floor (Math.random () * arr.length) alert (arr)

Iterace přes pole

V JavaScriptu se iterace přes pole provádí pomocí smyčky for:

var ovoce = ["Ananas", "Citron", "Jablko", "Pomeranč", "Broskev"] pro (var i = 0; i

Samostudium

Vytvořte funkci find (arr, value), která najde hodnotu v daném poli a vrátí její index, nebo -1, pokud nebyla nalezena žádná hodnota.

Například:

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

Řešení

Možné řešení může vypadat takto:

funkce find (pole, hodnota) (pro (var i = 0; i

To ale není pravda, protože == nerozlišuje rozdíl mezi 0 a false.

Je správnější použít === při práci s poli v JavaScriptu. Nejnovější standard ES5 navíc obsahuje funkci Array # indexOf. S jeho pomocí můžeme definovat funkci následujícím způsobem:

funkce find (array, value) (if (array.indexOf) return array.indexOf (value) for (var i = 0; i

Ještě chytřejší by bylo definovat find prostřednictvím podmínky a zkontrolovat, zda metoda indexOf existuje.

Samostudium

Vytvořte funkci filterNumeric (arr), která vezme pole a vrátí nové pole obsahující pouze číselné hodnoty z arr.

Příklad, jak by to mělo fungovat:

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

Řešení

Řešením je smyčka přes pole a přidání hodnot do nového pole, pokud jsou číselné.

připojit se a rozdělit

Někdy potřebujete rychlý způsob převodu pole JavaScript na řetězec. K tomu slouží metoda join.

Spojuje pole do řetězce pomocí zadaného oddělovače:

var ovoce = ["Citron", "Jablko", "Pomeranč", "Broskev"]; var str = fruit.join (","); alert (str);

Zpětnou konverzi lze snadno provést metodou rozdělení:

var ovoce = "Jablko, pomeranč, broskev"; var arr = fruits.split (","); // arr nyní obsahuje ["Apple", "Orange", "Peach"] alert (arr);

Samostudium

Objekt obsahuje vlastnost className, která obsahuje názvy tříd, oddělené mezerami:

Napište funkci addClass (obj, cls), která přidá třídu cls, ale pouze pokud neexistuje:

ddClass (obj, "new") // obj.className = "otevřít nabídku new" addClass (obj, "open") // žádné změny (třída již existuje) addClass (obj, "me") // obj.className = upozornění "otevřít nabídku, nové já" (obj.className) //

Řešení

Musíte rozdělit className a smyčku na části. Pokud třída není nalezena, je přidána.

Smyčka je mírně optimalizována pro zvýšení výkonu:

funkce addClass (elem, cls) (pro (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ý

Ve výše uvedeném příkladu je proměnná c definována na začátku smyčky a její poslední index je nastaven na i.

Samotná smyčka je zpracována v opačném směru a končí podmínkou i> = 0. Protože i> = 0 se kontroluje rychleji než i. Což v JavaScriptu zrychluje vyhledávání v poli.

Ořezání pole pomocí délky

Pomocí vlastnosti length můžete pole oříznout takto:

Zadáte délku a prohlížeč pole zkrátí.

Pole je objekt, což znamená

Ve skutečnosti je v JavaScriptu pole Object, doplněné o automatické nastavení délky a speciální metody.

To se liší od konceptu v jiných jazycích, kde pole představují souvislý segment paměti. To se také liší od propojeného seznamu založeného na frontě nebo zásobníku.

Numerické klíče pole

Klíče jsou čísla, ale mohou mít libovolné jméno:

arr = arr = 5 arr.prop = 10 // nedělejte to

V jazyce JavaScript jsou pole hashovací tabulky s výhodami výkonu, ale také nevýhodami.

Například push / pop funguje pouze na nejvzdálenějších prvcích pole, takže jsou neuvěřitelně rychlé.

push funguje pouze na konci:

var arr = ["Moje", "pole"] arr.push ("něco") upozornění (arr) // řetězec "pole"

Metody Shift / Unshift jsou pomalé, protože potřebují přečíslovat celé pole. Metoda spojování může také změnit číslování:

Shift / unshift je tedy pomalejší než push / pop. Čím větší je pole, tím déle trvá JavaScript k třídění pole.

Samostudium

Jaký bude výsledek? Proč?

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

Řešení

Protože pole jsou objekty, arr .. je vlastně volání metody objektu jako obj metoda:

arr () // stejné jako arr () // syntakticky špatné, ale koncepčně stejné: arr.2 () // přepsané stejným stylem jako obj.method () this = arr v tomto případě je předáno funkci, takže obsah arr je na výstupu. arr = ["a", "b"] arr.push (funkce () (alert (this))) arr () // "a", "b", funkce

Řídká pole, popis délky

Vlastnost length vám umožňuje získat nikoli velikost pole v JavaScriptu, ale poslední index + 1. To je důležité, pokud jde o řídká pole s „mezerami“ v indexech.

V následujícím příkladu přidáme dva prvky do prázdného ovoce, ale délka zůstane na 100:

var ovoce = // prázdné pole ovoce = "Peach" ovoce = "Jablečné" upozornění (fruit.length) // 100 (ale v poli jsou pouze 2 prvky)

Pokud se pokusíte vygenerovat řídké pole, prohlížeč zobrazí chybějící indexy jako prázdné prvky:

var ovoce = // prázdné pole ovoce = "Peach" ovoce = "upozornění na jablko" (ovoce) //, broskev, jablko (nebo něco podobného)

Ale pole je objekt se dvěma klíči. Chybějící hodnoty nezabírají místo.

Řídká pole se chovají podivně, když jsou na ně použity metody pole. Netuší, že chybí indexy:

var fruit = fruits = "Peach" fruit = "Apple" alert (fruit.pop ()) // push "Apple" (at index 9) alert (fruits.pop ()) // push out an unset item (at index 8)

Zkuste se vyhnout řídkým polím. Každopádně jejich metody nebudou fungovat dobře. Místo toho použijte Object.

Odebírání z pole

Jak víme, pole jsou objekty, takže k odstranění hodnoty můžeme použít delete:

var arr = ["Go", "to", "home"] smazat arr // nyní arr = ["Go", undefined, "home"] alert (arr) // not set

Můžete vidět, že hodnota je odstraňována, ale ne tak, jak bychom chtěli, protože pole obsahuje neurčený prvek.

Operátor odstranění odstraní pár klíč – hodnota a je to. Přirozeně, protože pole je pouze hash, pozice odstraněného prvku se stane nedefinovanou.

Více často než ne, musíme odstranit prvek, aniž bychom nechali „díry“ mezi indexy. S tím nám pomůže ještě jedna metoda.

Spojovací metoda

Metoda spojování může odebírat a nahrazovat prvky ve vícerozměrných polích JavaScriptu. Jeho syntaxe je:

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

Odstraní prvek deleteCount počínaje indexem a poté na své místo vloží elem1,…, elemN.

Podívejme se na několik příkladů:

var arr = ["Go", "to", "home"] arr.splice (1, 1) // odebere 1 prvek počínaje výstrahou indexu 1 (arr.join (",")) // ["Go" , "home"] (1 položka odstraněna)

Tímto způsobem můžete použít splice k odebrání jednoho prvku z pole. Čísla prvků pole jsou posunuta, aby zaplnila mezeru:

var arr = ["Přejít", "do", "domů"] arr.splice (0, 1) // odebrat 1 prvek počínaje od indexu 0 upozornění (arr) // "do" se stal prvním prvkem

Následující příklad ukazuje, jak vyměnit položky:

Metoda splice vrací pole odstraněných položek:

var arr = ["Přejít", "do", "domů", "nyní"]; // odstranit první 2 položky var odstraněn = arr.splice (0, 2) upozornění (odstraněno) // "Go", "to"<-- массив удаленных элементов splice может вставлять элементы, задайте 0 для deleteCount. var arr = ["Go", "to", "home"]; // со второй позиции // удаляем 0 // и вставляем "my", "sweet" arr.splice(2, 0, "my", "sweet") alert(arr) // "Go", "to", "my", "sweet", "home"

Tato metoda může také použít záporný index, který se počítá od konce pole:

var arr = // pro prvek -1 (předposlední) // odebere 0 prvků, // a vloží 3 a 4 arr.splice (-1, 0, 3, 4) alert (arr) // 1,2,3, 4.5

Samostudium

Objekt obsahuje vlastnost className, která obsahuje názvy tříd, oddělené mezerami:

var obj = (className: "open menu")

Napište funkci removeClass (obj, cls), která odebere třídu cls, pokud je zadána:

removeClass (obj, "open") // obj.className = "menu" removeClass (obj, "blabla") // žádné změny (neexistuje třída, kterou by bylo možné odebrat)

Řešení

Musíte rozdělit className na části a smyčku přes tyto části. Pokud je nalezena shoda, je odebrána z pole JavaScript objektů a poté připojena zpět na konec.

Pojďme to trochu optimalizovat:

funkce removeClass (elem, cls) (pro (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) // nabídka

Ve výše uvedeném příkladu je c nastaveno na začátku smyčky a i je nastaveno na jeho poslední index.

Smyčka běží v opačném směru a končí podmínkou i> = 0. Důvodem je, že i> = 0 se testuje rychleji než i. Což zrychluje hledání nemovitosti v c.

Slice metoda

Část pole můžete extrahovat pomocí metody slice (begin [, end]): var arr = ["Why", "learn", "JavaScript"]; var arr2 = arr.slice (0,2) // přebírá 2 prvky začínající na výstraze 0 (arr2.join (",")) // "Proč, učit se"

Všimněte si, že tato metoda nemění počet prvků v poli v JavaScriptu, ale kopíruje jeho část.

Druhý argument můžete vynechat, aby všechny prvky začínaly na konkrétním indexu:

var arr = ["Proč", "učit se", "JavaScript"]; var arr2 = arr.slice (1) // přijímá všechny prvky začínající 1 výstrahou (arr2.join (",")) // "učit se, JavaScript"

Metoda podporuje záporné indexy, stejně jako String # slice.

Reverzní metoda

Další užitečnou metodou je obrácení. Předpokládejme, že chci získat poslední část domény, například „ com"Z" my.site.com“. Postupujte takto:

var doména = "my.site.com" var last = doména.split ("."). upozornění zpět () (poslední)

Pole JavaScript podporují komplexní syntaxi (reverse ()) pro vyvolání metody a poté načtení prvku z výsledného pole.

Můžete provádět delší hovory jako reverzní () 0] arr.sort () alert (arr) // 1, 15, 2

Spusťte výše uvedený kód. Získáte objednávku 1, 15, 2. Důvodem je, že metoda převádí vše na řetězec a používá výchozí lexikografické pořadí.

V předchozím článku jsme si řekli, co to je a jak s tím pracovat. V tomto článku budeme hovořit o vícerozměrné pole.

Jedná se o pole, které má jeden nebo více prvků, což jsou také pole. Zejména v závislosti na hloubce reklamy může být vyvolána dvourozměrné pole(2 úrovně) buď trojrozměrné pole(3 úrovně) buď čtyřrozměrný(4 úrovně) a tak dále.

Nejoblíbenější, po jednorozměrném poli, nejčastěji používaným je dvourozměrné pole. Budeme to studovat podrobněji.


Jak vidíte, prvky dvourozměrného pole jsou jednorozměrná pole. Pokud by tato jednorozměrná pole obsahovala více polí, pak by pole arr již bylo trojrozměrné.

Pojďme si například vytvořit tři jednoduchá pole a vyplnit je daty. První vyplníme sudými čísly, druhé lichými čísly a třetí některými libovolnými údaji.

// Deklarujte tři prázdná pole var evenNumbers = new Array (); // Proměnná k - pro indexy pole evenNumbers var k = 0; var oddNumbers = nové pole (); // Proměnná n - pro indexy pole oddNumbers var n = 0; var data = new Array ("auto", "letadlo", true, 89, "m"); // Vyplňte pole evenNumbers sudými čísly pro (var i = 1; i

Chcete -li zjistit, co je uvnitř pole, můžete použít nástroj, jako je řídicí panel.

Například chceme vidět obsah pole s lichými čísly oddNumbers. Chcete -li to provést, napište do následujícího kódu následující řádek:

Console.log (oddNumbers);

Chcete -li vidět výsledek, musíte otevřít konzole v prohlížeči... V prohlížeči Google Chrome se to provádí takto: klikněte pravým tlačítkem na stránku a z kontextové nabídky vyberte poslední možnost „Zobrazit kód“, tj. Inspektor. V anglické verzi se tato možnost nazývá Inspect.


A níže se zobrazí panel nástrojů pro vývojáře. V něm musíte přejít na kartu Konzola.


Nyní, aby vytvořte dvourozměrné pole, musíte to deklarovat a přidat k tomu jednorozměrná pole, která jste vytvořili výše.

// Deklarujte dvourozměrné pole twoDimens a vyplňte jej var twoDimens = new Array (evenNumbers, oddNumbers, data); console.log (twoDimens);

Podívejme se na obsah tohoto pole v konzole.


iterace přes dvourozměrné pole

Nejprve se učme jak přistupovat k prvkům dvourozměrného pole.

Stejně jako u jednotlivých polí jsou prvky přístupné podle jejich indexů.

Například zobrazme prvek v indexu 3 z pole s lichými čísly (oddNumbers). Index jednorozměrného pole oddNumbers v dvojrozměrném poli twoDimens je jeden (1).

Document.write ("Prvek s indexem 3 z pole lichých čísel oddNumbers je:" + twoDimens); // Prvek: 7

V poli twoDimens odkazujeme na prvek v indexu 1. Prvek v tomto indexu je pole oddNumbers. A v tomto poli již přistupujeme k prvku s indexem 3, což je číslo 7.

Nyní přejdeme k samotné otázce jak iterovat přes dvourozměrné pole.

Smyčka přes dvourozměrné pole se provádí pomocí dvojité smyčky. Pojďme například iterovat naše pole twoDimens.

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

Prvek s indexem " + i +" " + j +" je rovný: " + twoDimens [i] [j] +"

"); } }

V první smyčce iterujeme samotné pole twoDimens. Ve druhé smyčce již iterujeme samotný prvek (pole). Nejprve se proměnná i rovná 0. Proto ve druhé smyčce nejprve iterujeme přes první pole evenNumbers, která má index 0. A již uvnitř druhé smyčky přistupujeme k prvkům tohoto pole. Tedy: twoDimens [j]. Kde j se pohybuje od 0 do délky pole evenNumbers.

Poté, co iterujeme prvky z prvního pole, vrátíme se do první smyčky, zvýšíme proměnnou i a pokračujeme v iteraci přes druhé pole oddNumbers, které má index 1. A tak iterujeme každý prvek dvojrozměrného pole twoDimens.

Nyní se podívejme na výsledek tohoto hledání:


To je vše, o čem jsem chtěl v tomto článku mluvit. Nyní víte, jak vytvořit dvourozměrné pole, jak přistupovat k prvkům dvojrozměrného pole a jak iterovat přes dvourozměrné pole. Doufám, že bylo vše jasné. Přeji vám velký úspěch!

Pole

Pole je uspořádaná kolekce hodnot. Hodnoty v poli se nazývají prvky a každý prvek je charakterizován číselnou polohou v poli, která se nazývá index. Pole v jazyce JavaScript nejsou zadána: prvky pole mohou být jakéhokoli typu a různé prvky stejného pole mohou být různých typů. Prvky pole mohou být dokonce objekty nebo jiná pole, což vám umožní vytvářet složité datové struktury, jako jsou pole objektů a pole polí.

Indexy polí v JavaScriptu jsou založeny na nule a používají 32bitová celá čísla-první prvek pole má index 0. Pole JavaScript jsou dynamická: mohou se podle potřeby zvětšovat a zmenšovat; není nutné deklarovat pevné velikosti polí při jejich vytváření ani znovu přidělovat paměť při změně velikosti.

Pole v JavaScriptu jsou specializovanou formou objektů a maticové indexy neznamenají nic jiného než jen názvy vlastností, které jsou shodou okolností celá čísla.

Vytváření polí

Pole nejsnadněji vytvoříte pomocí literálu, což je jednoduchý seznam prvků pole oddělených čárkami v hranatých závorkách. Hodnoty v literálu pole nemusí být konstanty - mohou to být libovolné výrazy, včetně literálů objektů:

Var prázdný =; // Prázdné pole var numbers =; // Pole s pěti číselnými prvky var misc = [1,1, true, "a",]; // 3 prvky různých typů + koncová čárka var base = 1024; var tabulka =; // Pole s proměnnými var arrObj = [,]; // 2 pole uvnitř obsahující objekty

Doslovná syntaxe pole vám umožňuje vložit volitelnou koncovou čárku, tj. doslovný [,] odpovídá poli se dvěma prvky, ne se třemi.

Dalším způsobem, jak vytvořit pole, je zavolat konstruktor Pole ()... Konstruktor lze volat třemi různými způsoby:

    Zavolejte konstruktor bez argumentů:

    Var arr = nové pole ();

    V tomto případě bude vytvořeno prázdné pole ekvivalentní doslovnému.

    Zavolejte konstruktor pomocí jednoho numerického argumentu určujícího délku pole:

    Var arr = nové pole (10);

    V tomto případě bude vytvořeno prázdné pole zadané délky. Tuto formu volání konstruktoru Array () lze použít k předběžnému přidělení paměti pro pole, pokud je předem znám počet jeho prvků. Všimněte si, že to neuloží žádné hodnoty v poli.

    Ve volání konstruktoru explicitně určete hodnoty prvních dvou nebo více prvků pole nebo jednoho nečíselného prvku:

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

    V tomto případě se argumenty konstruktoru stanou hodnotami prvků nového pole. Používání literálů pole je téměř vždy snazší než použití konstruktoru Array () tímto způsobem.

Čtení a zápis prvků pole

K prvkům pole se přistupuje pomocí operátoru. Vlevo od závorek musí být odkaz na pole. Libovolný výraz, který vrací nezápornou celočíselnou hodnotu, musí být v závorkách. Tato syntaxe je vhodná jak pro čtení, tak pro zápis hodnoty prvku pole. Proto jsou platná všechna následující prohlášení JavaScriptu:

// Vytvořte pole s jedním prvkem var arr = ["world"]; // Přečíst položku 0 var value = arr; // Zapište hodnotu do prvku 1 arr = 3,14; // Zapište hodnotu do prvku 2 i = 2; arr [i] = 3; // Napište hodnotu prvku 3 arr = "ahoj"; // Přečíst položky 0 a 2, zapsat hodnotu do položky 3 arr] = arr;

Připomínám, že pole jsou specializovaným druhem objektu. Hranaté závorky používané k přístupu k prvkům pole působí přesně stejně jako hranaté závorky používané k přístupu k vlastnostem objektu. Tlumočník JavaScriptu převádí číselné indexy v závorkách na řetězce - z indexu 1 se stane řetězec „1“ - a poté použije řetězce jako názvy vlastností.

Na převodu číselných indexů na řetězce není nic zvláštního: totéž lze provést s běžnými objekty:

Var obj = (); // Vytvořte jednoduchý objekt obj = "one"; // Indexujte jej celými čísly

Zvláštností polí je, že při použití názvů vlastností, která nejsou záporná celá čísla, pole automaticky určují hodnotu vlastnosti délka... Například pole arr bylo vytvořeno výše s jediným prvkem. Poté byly jeho prvkům přiřazeny hodnoty s indexy 1, 2 a 3. V důsledku těchto operací se hodnota vlastnosti délka pole změnila a stala se rovnou 4.

Měli byste jasně rozlišovat mezi indexy v poli a názvy vlastností objektu. Všechny indexy jsou názvy vlastností, ale pouze vlastnosti s celočíselnými názvy jsou indexy. Všechna pole jsou objekty a můžete k nim přidat vlastnosti s libovolným názvem. Pokud se však dotknete vlastností, které jsou indexy pole, pole reagují aktualizací hodnoty vlastnosti length podle potřeby.

Jako indexy pole jsou povolena záporná a necelá čísla. V tomto případě jsou čísla převedena na řetězce, které se používají jako názvy vlastností.

Přidávání a odebírání prvků pole

Už jsme viděli, že nejjednodušší způsob, jak přidat prvky do pole, je přiřadit hodnoty novým indexům. Metodu můžete také použít k přidání jednoho nebo více prvků na konec pole tam ():

Var arr =; // Vytvořte prázdné pole arr.push ("zero"); // Přidání hodnoty na konec arr.push ("one", 2); // Přidejte další dvě hodnoty

Můžete také přidat prvek na konec pole přiřazením hodnoty prvku arr. Chcete -li vložit prvek na začátek pole, můžete použít metodu zrušit řazení () a stávající prvky v poli jsou posunuty do vyšších indexů.

Prvky pole můžete odstranit pomocí operátoru odstranění, jako běžné vlastnosti objektů:

Var arr =; odstranit arr; 2 v zástavě; // false, index 2 v poli je nedefinovaný arr.length; // 3: operátor delete nemění vlastnost length pole

Odebrání prvku je podobné (ale mírně odlišné) přiřazení nedefinované hodnoty tomuto prvku. Všimněte si toho, že použití operátoru delete na prvek v poli nezmění hodnotu vlastnosti length, ani se neposune dolů nad prvky s vyšším indexem, aby vyplnil prázdné místo, které zbylo po odstranění prvku.

Kromě toho je možné odebrat prvky na konci pole jednoduchým přiřazením nové hodnoty vlastnosti length. Pole mají metodu pop ()(opak k push ()), což zmenší délku pole o 1 a vrátí hodnotu odstraněného prvku. Existuje také metoda směna ()(opak unshift ()), který odstraní prvek na začátku pole. Na rozdíl od operátoru delete metoda shift () posune všechny prvky dolů o jednu pozici pod jejich aktuální indexy.

Nakonec existuje víceúčelová metoda spojka (), což vám umožňuje vkládat, mazat a nahrazovat prvky polí. Změní hodnotu vlastnosti length a podle potřeby posouvá prvky pole s nižšími nebo vyššími indexy. Všechny tyto metody probereme o něco později.

Vícerozměrná pole

JavaScript nepodporuje „skutečná“ vícerozměrná pole, ale je dobré je napodobit pomocí polí z polí. K přístupu k datové položce v poli polí stačí použít operátor dvakrát.

Předpokládejme například, že matice proměnných je pole polí čísel. Každý prvek matice [x] je řada čísel. Pro přístup ke konkrétnímu číslu v poli můžete použít matici výrazů [x] [y]. Níže je uveden konkrétní příklad, kde se jako multiplikační tabulka používá dvojrozměrné pole:

// Vytvořte vícerozměrné pole var tabulka = nové pole (10); // V tabulce je 10 řádků pro (var i = 0; i

Metody třídy Array

Standard ECMAScript 3 definuje mnoho praktických funkcí pro práci s poli jako součást Array.prototype, které jsou k dispozici jako metody jakéhokoli pole. Tyto metody budou představeny v následujících podsekcích.

Metoda join ()

Metoda Array.join () převede všechny prvky v poli na řetězce, zřetězí je a vrátí výsledný řetězec. Volitelný argument lze metodě předat pomocí řetězce, který bude použit k oddělení položek ve výsledném řetězci. Není -li zadán žádný oddělovač, použije se čárka. Například následující úryvek má za následek řetězec „1,2,3“:

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

Metoda reverse ()

Metoda Array.reverse () obrací pořadí prvků v poli a vrací přeuspořádané pole. Permutace se provádí přímo na původním poli, tj. tato metoda nevytváří nové pole s přeuspořádanými prvky, ale mění pořadí v již existujícím poli. Například následující úryvek, který používá metody reverse () a join (), má za následek řetězec „3,2,1“:

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

Metoda Sort ()

Metoda Array.sort () seřadí prvky v původním poli a vrátí seřazené pole. Pokud je metoda sort () volána bez argumentů, je řazení provedeno abecedně (pro srovnání jsou položky v případě potřeby dočasně převedeny na řetězce). Nedefinované prvky jsou zabaleny na konec pole.

Porovnávací funkci můžete předat jako argument sort () pro řazení v jakémkoli jiném neabecedním pořadí. Tato funkce určuje, který z jejích dvou argumentů by měl být v seřazeném seznamu na prvním místě. Pokud musí první argument předcházet druhému, musí porovnávací funkce vrátit záporné číslo. Pokud má první argument následovat druhý v seřazeném poli, pak funkce musí vrátit číslo větší než nula. A pokud jsou obě hodnoty ekvivalentní (tj. Jejich pořadí není důležité), porovnávací funkce by měla vrátit 0:

Var arr =; arr.sort (); // Abecední pořadí: 1111, 222, 33, 4 arr.sort (funkce (a, b) (// Číselné pořadí: 4, 33, 222, 1111 return ab; // Vrátí hodnotu 0 // v závislosti na řazení pořadí a a b)); // Řazení zpět, od nejvyššího po nejnižší arr.sort (funkce (a, b) (návrat b-a));

Všimněte si, jak je praktické používat v tomto úryvku funkci bez názvu. Srovnávací funkce se používá pouze zde, není tedy nutné ji pojmenovávat.

Metoda concat ()

Metoda Array.concat () vytvoří a vrátí nové pole obsahující prvky původního pole, na které byla metoda concat () volána, a hodnoty všech argumentů předaných metodě concat (). Pokud jsou některé z těchto argumentů samy maticí, její prvky se přidají do vráceného pole. Je však třeba poznamenat, že neexistuje rekurzivní převod pole z polí do jednorozměrného pole. Metoda concat () nemění původní pole. Níže uvádíme několik příkladů:

Var arr =; arr.concat (4, 5); // Vrací arr.concat (); // Vrátí arr.concat (,) // Vrací arr.concat (4,]) // Vrací]

Metoda Slice ()

Metoda Array.slice () vrací řez nebo dílčí pole zadaného pole. Dva argumenty metody definují začátek a konec vráceného bloku. Vrácené pole obsahuje prvek očíslovaný v prvním argumentu plus všechny následující prvky až do (ale ne včetně) prvku očíslovaného ve druhém argumentu.

Pokud je zadán pouze jeden argument, vrácené pole obsahuje všechny prvky od počáteční pozice do konce pole. Pokud je některý z argumentů záporný, určuje číslo prvku vzhledem ke konci pole. Argument -1 tedy odpovídá poslednímu prvku pole a argument -3 odpovídá třetímu prvku pole od konce. Zde jsou nějaké příklady:

Var arr =; arr. plátek (0,3); // Vrátí arr.slice (3); // Vrátí arr.slice (1, -1); // Vrátí arr.slice (-3, -2); // Vrátí se

Metoda Splice ()

Metoda Array.splice () je obecná metoda, která vkládá nebo odebírá prvky z pole. Na rozdíl od metod slice () a concat () metoda splice () upravuje původní pole, na které byla volána. Metody splice () a slice () mají velmi podobná jména, ale provádějí zcela odlišné operace.

Metoda splice () může odebírat prvky z pole, vkládat nové prvky nebo provádět obojí současně. Prvky pole jsou podle potřeby posunuty tak, aby po vložení nebo vymazání byla vytvořena souvislá sekvence.

První argument metody splice () určuje pozici v poli, ze které se má vložit a / nebo odstranit. Druhý argument určuje počet prvků, které mají být z pole odebrány (vyjmuty). Pokud je druhý argument vynechán, budou odebrány všechny prvky pole ze zadaného pole do konce pole. Metoda splice () vrací pole odstraněných prvků, nebo (pokud nebyl odstraněn žádný z prvků) prázdné pole.

První dva argumenty metody splice () určují prvky pole, které se mají odebrat. Za těmito argumenty může následovat libovolný počet dalších argumentů určujících prvky, které mají být vloženy do pole, počínaje pozicí uvedenou v prvním argumentu.

Var arr =; arr.splice (4); // Vrátí arr = arr.splice (1,2); // Vrátí arr = arr.splice (1,1); // Vrátí se; arr = arr =; arr.splice (2,0, "a", "b"); // Vrátí se; arr =

Metody push () a pop ()

Metody push () a pop () vám umožňují pracovat s poli jako zásobníky. Metoda push () přidá jeden nebo více nových prvků na konec pole a vrátí jeho novou délku. Metoda pop () provádí opačnou operaci - odebere poslední prvek pole, zmenší délku pole a vrátí hodnotu, kterou odstranila. Všimněte si, že obě tyto metody místo vytváření upravené kopie upravují původní pole.

Metody unshift () a shift ()

Metody unshift () a shift () se chovají téměř stejně jako push () a pop (), kromě toho, že vkládají a odebírají prvky na začátku pole, nikoli na konci. Metoda unshift () posouvá stávající prvky směrem k větším indexům, aby uvolnila místo, přidá prvek nebo prvky na začátek pole a vrátí novou délku pole. Metoda shift () odebere a vrátí první prvek pole a přesune všechny následující prvky o jednu pozici dolů, aby zabírala místo uvolněné na začátku pole.

Poslední aktualizace: 09.04.2018

Pole jsou určena pro práci s datovými sadami. K vytvoření pole se používá výraz new Array ():

Var myArray = nové pole ();

Existuje také kratší způsob inicializace pole:

Var myArray =;

V tomto případě vytváříme prázdné pole. Můžete k němu ale také přidat počáteční data:

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

V tomto případě budou v myArray tři prvky. Graficky to lze znázornit následovně:

Indexy se používají k označení jednotlivých prvků pole. Počítání začíná od nuly, to znamená, že první prvek bude mít index 0 a poslední bude mít index 2:

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

Pokud se pokusíme přistupovat k prvku v indexu větším než je velikost pole, dostaneme nedefinované:

Var people = ["Tom", "Alice", "Sam"]; console.log (lidé); // nedefinováno

V indexu jsou také nastaveny hodnoty pro prvky pole:

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

Navíc, na rozdíl od jiných jazyků, jako je C # nebo Java, můžete nainstalovat prvek, který nebyl původně nainstalován:

Var people = ["Tom", "Alice", "Sam"]; console.log (lidé); // nedefinováno - v poli people jsou pouze tři prvky = "Bob"; console.log (lidé); // Bob

Je také třeba poznamenat, že na rozdíl od řady programovacích jazyků v JavaScriptu nejsou pole silně typována, jedno pole může ukládat data různých typů:

Objekty Var = ["Tom", 12, true, 3,14, false]; console.log (objekty);

provozovatel pomazánky

Operátor spread ... vám umožňuje vzít hodnoty z pole samostatně:

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

Operátor šíření je určen před polem. Výsledkem je, že výraz ... čísla vrátí sadu čísel, ale nebude to pole, ale jednotlivé hodnoty.

Vícerozměrná pole

Pole mohou být jednorozměrná a vícerozměrná. Každý prvek ve vícerozměrném poli může být samostatné pole. Výše jsme uvažovali o jednorozměrném poli, nyní vytvoříme vícerozměrné pole:

Čísla varů1 =; // jednorozměrné pole var numbers2 = [,]; // dvourozměrné pole

Vizuálně lze obě pole znázornit následovně:

Jednorozměrná čísla polí 1

K získání jednoho prvku pole se používá také index:

Var tomInfo = lidé;

Teprve nyní bude proměnná tomInfo představovat pole. Abychom dostali prvek do vnořeného pole, musíme použít jeho druhou dimenzi:

Console.log ("Jméno:" + lidé); // Tom console.log ("Věk:" + lidé); // 25

To znamená, že pokud můžeme vizuálně reprezentovat dvourozměrné pole ve formě tabulky, pak prvek people bude odkazovat na buňku tabulky, která se nachází na průsečíku prvního řádku a druhého sloupce (první dimenze je 0 - řádek, druhá dimenze - 1 - sloupec).

Můžeme také provést úkol:

Var people = [["Tom", 25, false], ["Bill", 38, true], ["Alice", 21, false]]; lidé = 56; // přiřazení samostatné hodnoty console.log (people); // 56 lidí = ["Bob", 29, nepravda]; // přiřazení pole console.log (people); // Bob

Při vytváření vícerozměrných polí nejsme omezeni pouze na dvourozměrná pole, ale můžeme použít i velkorozměrná pole:

Var čísla =; čísla =; // now numbers is a two-dimensional array numbers =; // now numbers is a three-dimensional array numbers = 5; // první prvek 3D pole je 5 console.log (numbers);

Zdravím všechny, kteří se zajímají o vícerozměrná pole a třídění JavaScriptu. V aktuální publikaci se pokusím pokrýt toto téma do všech podrobností.

Po přečtení tohoto článku se tedy dozvíte, proč se ve webových aplikacích používají vícerozměrná pole, jak se vytvářejí a jak s nimi lze manipulovat a třídit. Pojďme se pustit do učení!

Jak se vytvářejí vícerozměrná pole a k čemu slouží?

Na začátek je dobré si připomenout, jak se vytváří pravidelné jednorozměrné pole.

var pole =

Nyní si pamatujte, že vícerozměrné pole je pole polí. Souhlasím, zní to jako tautologie. Přečtěte si však definici znovu. Multidimenzionální pole se skutečně skládá z určitého počtu vnořených.

Zvažte následující situaci. Na začátku hry uživatel zadá své jméno a po skončení se na obrazovce zobrazí tabulka hodnocení se jmény hráčů a jejich záznamy.

Je jasné, že takové informace jsou uloženy v databázi. Když ji ale vytáhneme z databáze, dostaneme vícerozměrné pole. Koneckonců, každý podoblast obsahuje přihlašovací údaje hráče a počet získaných bodů.

Všechno to bude vypadat takto:

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

Jak vidíte, informace mohou být uloženy heterogenně. Mohou to být řetězce, čísla a dokonce. To je možné, protože pole v jsou nezadaná.

V tomto případě přístup k prvkům probíhá prostřednictvím dvojitého operátoru.

Chcete -li konsolidovat materiál, analyzujte malý program.

Výsledky =

Pole jsou docela pohodlný způsob ukládání objednaných komplexních dat při jejich zpracování. Kromě toho je velmi výhodné s nimi pracovat a současně je rychlost jejich zpracování poměrně vysoká.

Metody třídění dat

Pro pole v JavaScriptu existuje vestavěná metoda s názvem třídit ()... Tento nástroj je velmi flexibilní. A teď vysvětlím proč.

Pokud použijete metodu bez parametrů, pak automaticky uspořádá dílčí pole podle prvního prvku v abecedním pořadí. Takže při volání Výsledek.třídit () analyzovaný objekt bude vypadat takto:

Alexey, 124

Markus, 333

Nataša, 211

A pokud vyměníte prvky v každém vnořeném poli, získáte:

124, Alexey

211, Nataša

333, Markus

V tomto případě jsou pro srovnání všechny prvky dočasně převedeny na řetězce.

Pokud k vyřešení konkrétního úkolu potřebujete funkci, která třídí prvky nestandardním způsobem, pak ji můžete napsat sami a předat ji jako parametr třídit ()... Je třeba poznamenat, že uživatelem definovaná funkce musí vrátit:

  • kladné číslo (obecně zvolte 1), pokud první specifikovaná položka následuje za druhou ve srovnání;
  • záporné číslo (obvykle -1), pokud by druhá vybraná položka měla následovat první;
  • nula, pokud jsou obě testované hodnoty stejné.

Vezměme si jako příklad počáteční pole Výsledekřadit podle bodů. Kromě toho budou výsledky seřazeny od nejvyšší po nejnižší. To lze provést dvěma způsoby.

V první verzi jsem změnil logiku řazení, tj. v situaci, kdy je nutné vrátit kladné číslo, vrátím záporné a naopak.

Záznamová tabulka:

Ale ve druhé metodě jsem nechal logiku řazení neporušenou, ale navíc jsem použil jinou metodu - zpět ()... Jak název napovídá, obrátí pořadí prvků.

Funkce sort () bude tedy vypadat takto:

1 2 3 4 5 funkce RecordSort (a, b) (if (a> b) return 1; else if (a< b) return -1; else return 0; }

funkce RecordSort (a, b) (if (a> b) return 1; else if (a< b) return -1; else return 0; }

Poté přidáme výše uvedenou metodu.

Závěr je učiněn podobným způsobem.

Chci vás upozornit na jeden důležitý bod. Při použití těchto funkcí dojde ke všem změnám v poli, na které je použijete. Pokud tedy potřebujete zachovat původní formu dat, vytvořte kopii a poté ji upravte.

No, tak jsem mluvil o vícerozměrných polích a jejich třídění. Pokud se vám článek líbil, přihlaste se k odběru blogu a přečtěte si další stejně zajímavé publikace. Byl bych vděčný za reposty. Do příště!

Ahoj!

S pozdravem, Roman Chueshov