Többdimenziós tömbök a JavaScriptben. Kétdimenziós tömb JavaScript Javascript tömb többdimenziós

Ebben a cikkben a szabványos JavaScript számszerűen indexelt tömböket vizsgáljuk. A tömböket szögletes zárójelben kell megadni:

var gyümölcsök = ["Alma", "Narancs", "Szamár"]

Egy elem kibontásához helyezze szögletes zárójelbe az indexét. Első index 0:

var gyümölcsök = ["Alma", "Narancs", "Szamár"] riasztás (gyümölcsök) figyelmeztetés (gyümölcsök) figyelmeztetés (gyümölcsök)

Megkaphatjuk a JavaScript tömb hosszát is:

var gyümölcsök = ["Alma", "Narancs", "Szamár"] figyelmeztetés (gyümölcsök.hossza)

Hoppá! Létrehoztunk egy tömböt két gyümölccsel és egy szamárral. Most el kell távolítanunk a szamarat.

A pop és push módszerek

A JavaScript pop -módszere eltávolít egy elemet a tömbből, és visszaadja azt.

Az alábbi példa bemutatja, hogyan lehet lekérni a szamarat egy tömbből:

var fruit = ["Apple", "Orange", "Donkey"] alert ("Törlöm" + fruit.pop ()) // Most már csak ["Apple", "Orange"] jelzésünk van ("Now a tömb mérete: "+ gyümölcsök.hossz) // szamár eltávolítva

Ne feledje, hogy a pop magát a tömböt módosítja.

A pop analógja a push módszer, amely elemet ad hozzá egy tömbhöz. Például elfelejtettünk barackot hozzáadni:

var gyümölcsök = ["Alma", "Narancs"] gyümölcsök.push ("Barack"); // most van ["Apple", "Orange", "Peach"] riasztás ("Utolsó tétel:" + gyümölcsök)

  1. Hozzon létre stílustömböt az elemekkel " Dzsessz”, “Blues”;
  2. Adja hozzá az értéket " Rock'n'Roll«;
  3. Cserélje ki a második értéket a végéről a következőre: " Klasszikus". Egy tömböt kell végezned: " Dzsessz”, ”Klasszikus”, ”Rock'n'Roll”. A kódnak a tömb bármely hosszában működnie kell;
  4. Kivonja az utolsó értéket a tömbből, és riasztja.

Megoldás

// 1 var style = ["Jazz", "Bluez"] // 2 style.push ("Rock" n "Roll") // vagy: styles = "Rock" n "Roll" // 3 styles = "Classic "// 4 figyelmeztetés (styles.pop ())

Shift / unshift módszerek

A shift / unshift metódusok a tömb végén működnek, de a shift segítségével az elemeket felfelé is tolhatja ( a tömb első értéke az elemek eltolásával eltávolításra kerül). Az unhift módszer lehetővé teszi a JavaScript számára, hogy a végétől egy elemet adjon hozzá egy tömbhöz:

var gyümölcsök = ["Alma", "Narancs"] var alma = gyümölcsök.eltolódás () // most már csak ["Narancs"] gyümölcsök vannak. Narancs "] riasztás (gyümölcsök.hossza) // 2

A shift és az unshift egyszerre több elemen is működhet:

var fruit = ["Apple"] fruit.push ("Orange", "Peach") fruit.unshift ("Ananász", "Citrom") // most a tömb így néz ki: ["Ananász", "Citrom", "Alma", "Narancs", "Őszibarack"]

Önálló tanulási feladat

Írjon be egy kódot egy véletlen érték megjelenítéséhez az arr tömbből riasztáson keresztül:

var arr = ["Szilva", "Narancs", "Szamár", "Sárgarépa", "JavaScript"]

Megjegyzés: A véletlenszám minimális és maximális érték közötti (beleértve) kódja a következő:

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

Megoldás

Véletlen számot kell kinyernünk 0 és arr.length-1 között (beleértve):

var arr = ["Szilva", "Narancs", "Szamár", "Sárgarépa", "JavaScript"] var rand = Math.floor (Math.random () * arr.length) alert (arr)

Iterelés egy tömb felett

JavaScript esetén a tömb feletti iteráció for for loop segítségével történik:

var gyümölcsök = ["Ananász", "Citrom", "Alma", "Narancs", "Őszibarack"] for (var i = 0; i

Önálló tanulási feladat

Hozzon létre egy find (arr, value) függvényt, amely megtalálja az adott tömb értékét, és visszaadja annak indexét, vagy -1, ha nem találtunk értéket.

Például:

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

Megoldás

Egy lehetséges megoldás így nézhet ki:

függvénykeresés (tömb, érték) (for (var i = 0; i

De ez nem igaz, mert == nem tesz különbséget 0 és hamis között.

Helyesebb a === kifejezést használni, ha tömbökkel dolgozik JavaScript -ben. Ezenkívül a legújabb ES5 szabvány tartalmazza az Array # indexOf függvényt. Segítségével a következőképpen definiálhatunk egy függvényt:

függvénykeresés (tömb, érték) (ha (tömb.indexOf) visszatér tömb.indexOf (érték) a (var i = 0; i

Még okosabb lenne egy feltétellel definiálni a find -ot, hogy ellenőrizze, létezik -e az indexOf metódus.

Önálló tanulási feladat

Funkciószűrő létrehozásaNumeric (arr), amely egy tömböt vesz fel, és egy új tömböt ad vissza, amely csak az arr értékét tartalmazza.

Példa ennek működésére:

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

Megoldás

A megoldás az, hogy cikluson át a tömbön és értékeket adunk hozzá az új tömbhöz, ha azok numerikusak.

csatlakozni és szétválni

Néha szüksége van egy gyors módra a JavaScript tömb karakterlánccá konvertálásához. Erre való a csatlakozási módszer.

A tömböt karakterlánccá fűzi a megadott határoló segítségével:

var gyümölcsök = ["Citrom", "Alma", "Narancs", "Őszibarack"]; var str = gyümölcsök.csatlakozz (","); riasztás (str);

A fordított konverzió egyszerűen elvégezhető az osztott módszerrel:

var gyümölcsök = "Alma, narancs, őszibarack"; var arr = gyümölcsök.split (","); // arr most tartalmazza az ["Apple", "Orange", "Peach"] alert (arr);

Önálló tanulási feladat

Az objektum tartalmaz egy className tulajdonságot, amely az osztályneveket szóközökkel elválasztva tartalmazza:

Írjon egy addClass (obj, cls) függvényt, amely hozzáadja a cls osztályt, de csak akkor, ha nem létezik:

ddClass (obj, "new") // obj.className = "menü megnyitása new" addClass (obj, "open") // nincs változás (az osztály már létezik) addClass (obj, "én") // obj.className = "nyitott menü új én" figyelmeztetés (obj.className) //

Megoldás

Az osztálynév és a ciklus részekre kell osztani. Ha az osztály nem található, akkor hozzáadódik.

A hurok kissé optimalizált a teljesítmény növelése érdekében:

function addClass (elem, cls) (for (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) // menü megnyitása új

A fenti példában a c változó a ciklus elején van definiálva, utolsó indexe pedig i.

Maga a ciklus az ellenkező irányba kerül feldolgozásra, az i> = 0 feltétellel végződve. Mivel i> = 0 gyorsabban ellenőrizhető, mint az i. A JavaScript gyorsítja a tömbökben való keresést.

Hosszúság használata tömb kivágásához

A length tulajdonság használatával a következőképpen vághat le egy tömböt:

Ön megadja a hosszúságot, és a böngésző csonkolja a tömböt.

A tömb tárgy, ami azt jelenti

Valójában a JavaScriptben az Array egy objektum, automatikus hosszbeállítással és speciális módszerekkel kiegészítve.

Ez eltér a többi nyelv fogalmától, ahol a tömbök a memória szomszédos szegmensét képviselik. Ez is különbözik a soron vagy verem alapú linkelt listától.

Nem numerikus tömb billentyűk

A kulcsok számok, de bármilyen névvel rendelkezhetnek:

arr = arr = 5 arr.prop = 10 // ne tedd ezt

A JavaScriptben a tömbök hash táblák a teljesítményük előnyeivel és hátrányaival együtt.

Például a push / pop csak a tömb legkülső elemein működik, így hihetetlenül gyorsak.

a push csak a végén működik:

var arr = ["Saját", "tömb"] arr.push ("valami") alert (arr) // string "tömb"

A shift / unshift metódusok lassúak, mert át kell számozniuk a teljes tömböt. A splice módszer a számozást is megváltoztathatja:

Így a shift / unshift lassabb, mint a push / pop. Minél nagyobb a tömb, annál hosszabb ideig tart a JavaScript a tömb rendezéséhez.

Önálló tanulási feladat

Mi lesz az eredmény? Miért?

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

Megoldás

Mivel a tömbök objektumok, az arr .. valójában hívás egy olyan objektum módszerére, mint az obj módszer:

arr () // ugyanaz, mint arr () // szintaktikailag rossz, de fogalmilag ugyanaz: arr.2 () // átírva ugyanabban a stílusban, mint az obj.method () this = arr ebben az esetben átadódik a függvénynek, így az arr tartalma megjelenik. arr = ["a", "b"] arr.push (function () (alert (this))) arr () // "a", "b", function

Ritka tömbök, hosszleírás

A length tulajdonság lehetővé teszi, hogy ne a tömb méretét kapja meg a JavaScriptben, hanem az utolsó indexet + 1. Ez fontos, ha ritka tömbökről van szó, az indexekben "hiányosságokkal".

A következő példában két elemet adunk az üres gyümölcsökhöz, de a hossza 100:

var gyümölcsök = // üres tömb gyümölcsök = "Őszibarack" gyümölcsök = "Alma" figyelmeztetés (gyümölcsök.hossz) // 100 (de csak 2 elem található a tömbben)

Ha ritka tömböt próbál kiadni, a böngésző üres elemként jeleníti meg a hiányzó indexeket:

var gyümölcsök = // üres tömb gyümölcsök = "Peach" gyümölcsök = "Alma" figyelmeztetés (gyümölcsök) //, Barack, Alma (vagy valami hasonló)

De a tömb két kulcsú objektum. A hiányzó értékek nem foglalnak helyet.

A ritka tömbök furcsán viselkednek, ha tömb módszereket alkalmaznak rájuk. Fogalmuk sincs, hogy hiányoznak az indexek:

var gyümölcsök = gyümölcsök = "Őszibarack" gyümölcsök = "Alma" riasztás (fruit.pop ()) // nyomja meg az "Apple" (a 9. indexnél) figyelmeztetést (fruit.pop ()) // nyomjon ki egy beállítatlan elemet (indexnél 8)

Próbálja elkerülni a ritka tömböket. Egyébként a módszereik nem fognak jól működni. Használja inkább az Objektumot.

Eltávolítás tömbből

Mint tudjuk, a tömbök objektumok, így a delete segítségével törölhetjük az értéket:

var arr = ["Go", "to", "home"] delete arr // now arr = ["Go", undefined, "home"] alert (arr) // nincs beállítva

Láthatja, hogy az érték eltávolításra kerül, de nem úgy, ahogyan szeretnénk, mert a tömb meghatározatlan elemet tartalmaz.

A delete operátor törli a kulcs-érték párost, és ennyi. Természetesen, mivel egy tömb csak kivonat, az eltávolított elem pozíciója meghatározhatatlanná válik.

Leggyakrabban törölnünk kell egy elemet anélkül, hogy "lyukakat" hagynánk az indexek között. Van egy másik módszer, amely segít nekünk ebben.

Splice módszer

A splice módszer eltávolíthatja és kicserélheti a JavaScript többdimenziós tömbjeinek elemeit. Szintaxisa a következő:

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

Törli a deleteCount elemet az indextől kezdve, majd beszúrja az elem1,…, elemN helyére.

Nézzünk néhány példát:

var arr = ["Go", "to", "home"] arr.splice (1, 1) // 1 elem eltávolítása az index 1 riasztásból kiindulva (arr.join (",")) // ["Go" , "otthon"] (1 elem eltávolítva)

Így a splice segítségével eltávolíthat egy elemet a tömbből. A tömb elemeinek számát eltolják, hogy pótolják a hiányt:

var arr = ["Go", "to", "home"] arr.splice (0, 1) // 1 elem eltávolítása a 0 indexből kiindulva alert (arr) // "to" lett az első elem

A következő példa bemutatja az elemek cseréjét:

A splice módszer az eltávolított elemek tömbjét adja vissza:

var arr = ["Menj", "ide", "haza", "most"]; // az első 2 elem eltávolítása var eltávolítva = arr.splice (0, 2) alert (eltávolítva) // "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"

Ez a módszer negatív indexet is használhat, amelyet a tömb végétől számolunk:

var arr = // a -1 elemnél (utolsó előtti) // távolítson el 0 elemet, // és illessze be a 3 és 4 arr.slicice (-1, 0, 3, 4) alert (arr) // 1,2,3, 4.5

Önálló tanulási feladat

Az objektum tartalmaz egy className tulajdonságot, amely az osztályneveket tartalmazza, szóközökkel elválasztva:

var obj = (className: "menü megnyitása")

Írjon egy removeClass (obj, cls) függvényt, amely eltávolítja a cls osztályt, ha megadta:

removeClass (obj, "open") // obj.className = "menu" removeClass (obj, "blabla") // nincs módosítás (nincs eltávolítandó osztály)

Megoldás

A className -t részekre kell bontani, és ezeken a részeken át kell hurkolni. Ha talál egyezést, akkor eltávolítja azt a JavaScript objektumtömbből, majd visszailleszti a végére.

Ezt optimalizáljuk egy kicsit:

function removeClass (elem, cls) (for (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) // menü

A fenti példában a c a ciklus elején van beállítva, és az i az utolsó indexe.

Maga a hurok az ellenkező irányba fut, és i> = 0 feltétellel végződik. Ez azért van, mert i> = 0 gyorsabban tesztelhető, mint az i. Ami felgyorsítja az ingatlan keresését c.

Szelet módszer

Egy tömb egy részét a szelet (kezdődik [, vége]) módszerrel vonhatja ki: var arr = ["Miért", "tanul", "JavaScript"]; var arr2 = arr.slice (0,2) // 2 elemet vesz fel 0 riasztástól kezdve (arr2.join (",")) // "Miért, tanulj"

Ne feledje, hogy ez a módszer nem változtatja meg a tömb elemeinek számát a JavaScriptben, hanem annak egy részét másolja.

A második argumentumot kihagyhatja, ha minden elem egy adott indexből indul ki:

var arr = ["Miért", "tanul", "JavaScript"]; var arr2 = arr.slice (1) // minden elemet elfogad 1 riasztással (arr2.join (",")) // "tanulni, JavaScript"

A módszer támogatja a negatív indexeket, akárcsak a String # szelet.

Fordított módszer

Egy másik hasznos módszer a fordított. Tegyük fel, hogy meg akarom szerezni a domain utolsó részét, például: com"Tól től" my.site.com”. Ezt a következőképpen teheti meg:

var domain = "my.site.com" var last = domain.split ("."). reverse () alert (last)

Vegye figyelembe, hogy a JavaScript tömbök komplex szintaxist (reverse ()) támogatnak egy módszer meghívásához, majd egy elem lekéréséhez a kapott tömbből.

Hosszabb hívásokat is kezdeményezhet, például visszairányítást () 0] arr.sort () alert (arr) // 1, 15, 2

Futtassa a fenti kódot. Megkapja a rendelést 1, 15, 2. Ennek az az oka, hogy a módszer mindent karakterlánccá alakít át, és az alapértelmezett lexikográfiai sorrendet használja.

Az előző cikkben arról beszéltünk, hogy mi ez és hogyan kell vele dolgozni. Ebben a cikkben fogunk beszélni többdimenziós tömb.

Ez egy tömb, amely egy vagy több elemet tartalmaz, amelyek szintén tömbök. A hirdetés mélységétől függően, különösen, lehet hívni kétdimenziós tömb(2 szint) sem háromdimenziós tömb(3 szint) sem négydimenziós(4 szint) és így tovább.

A legnépszerűbb az egydimenziós tömb után a leggyakrabban használt kétdimenziós tömb. Részletesebben tanulmányozzuk.


Mint látható, a kétdimenziós tömb elemei egydimenziós tömbök. Ha ezek az egydimenziós tömbök több tömböt tartalmaznának, akkor az arr tömb már háromdimenziós lenne.

Példaként hozzunk létre három egyszerű tömböt, és töltsük fel azokat adatokkal. Az elsőt páros számokkal, a másodikat páratlan számokkal, a harmadikat pedig tetszőleges adatokkal töltjük fel.

// Három üres tömb deklarálása var evenNumbers = new Array (); // k változó - tömbindexeknél páros számok var k = 0; var páratlan számok = új tömb (); // n változó - tömbindexekhez páratlan számok var n = 0; var adatok = new Array ("autó", "repülőgép", igaz, 89, "m"); // Töltse ki a páros számok tömböt páros számokkal a (var i = 1; i

Annak érdekében, hogy lássa, mi van a tömbön belül, használhat egy eszközt, például konzol.

Például látni szeretnénk egy páratlan számú tömb tartalmát. Ehhez írja be a következő sort az alábbi kódba:

Console.log (páratlan számok);

Az eredmény megtekintéséhez meg kell nyitnia konzol a böngészőben... A Google Chrome-ban ez a következőképpen történik: kattintson jobb gombbal az oldalra, és a helyi menüből válassza ki az utolsó „Kód megtekintése” lehetőséget, azaz az ellenőrzőt. Az angol verzióban ezt az opciót Inspect -nek hívják.


És alatta megjelenik a fejlesztői eszköztár. Ebben el kell mennie a Konzol fülre.


Most annak érdekében hozzon létre egy kétdimenziós tömböt, deklarálnia kell, és hozzá kell adnia a fent létrehozott egydimenziós tömböket.

// Kétdimenziós tömb deklarálása twoDimens, és kitöltése var twoDimens = new Array (páros számok, páratlan számok, adatok); console.log (twoDimens);

Lássuk ennek a tömbnek a tartalmát a konzolban.


kétdimenziós tömbön keresztül iterálva

Először is tanuljunk hogyan lehet elérni egy kétdimenziós tömb elemeit.

Az egyes tömbökhöz hasonlóan az elemekhez indexük is hozzáfér.

Például jelenítsük meg az elemet a 3. indexben egy páratlan számú tömbből (páratlan számok). Az oddNumbers egydimenziós tömb indexe a twoDimens kétdimenziós tömbben egy (1).

Document.write ("A páratlan számok tömbjének 3 -as indexű eleme:" + twoDimens); Elem: 7

A twoDimens tömbben az 1. indexben található elemre hivatkozunk. Az indexben lévő elem a páratlan számok tömbje. És ebben a tömbben már elérjük a 3 -as indexű elemet, ami a 7 -es szám.

Most térjünk rá magára a kérdésre hogyan lehet iterálni egy kétdimenziós tömbön.

A kétdimenziós tömb feletti hurok dupla hurok segítségével történik. Például iteráljuk át a kétdimenziós tömbünket.

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

Elem indexdel " + i +" " + j +" egyenlő: " + kétdimenziós [i] [j] +"

"); } }

Az első ciklusban a kétDimens tömb felett iterálunk. A második ciklusban már iteráljuk magát az elemet (tömböt). Először is, az i változó 0 -val egyenlő. Ezért a második ciklusban először iteráljuk az első evenNumbers tömböt, amelynek indexe 0. És már a második cikluson belül is elérjük ennek a tömbnek az elemeit. Így: twoDimens [j]. Ahol j 0 -tól a páros számok tömb hosszáig terjed.

Miután megismételtük az első tömb elemeit, visszatérünk az első ciklushoz, növeljük az i változót, és folytatjuk az iterációt a páratlan számok második tömbjén, amelynek indexe 1. tömb twoDimens.

Most nézzük a keresés eredményét:


Csak erről akartam beszélni ebben a cikkben. Most már tudja, hogyan hozhat létre kétdimenziós tömböt, hogyan férhet hozzá egy kétdimenziós tömb elemeihez, és hogyan ismételheti meg a kétdimenziós tömböt. Remélem minden világos volt. Sok sikert kívánok!

Tömbök

Sor rendezett értékgyűjtemény. A tömb értékeit elemeknek nevezzük, és minden elemet a tömb numerikus pozíciója, indexnek nevezünk. A JavaScript tömbjei típustalanok: a tömb elemei bármilyen típusúak lehetnek, és ugyanazon tömb különböző elemei különböző típusúak lehetnek. A tömb elemek akár objektumok vagy más tömbök is lehetnek, így bonyolult adatstruktúrákat hozhat létre, például objektumokat és tömbtömböket.

A JavaScript tömbindexei nulla alapúak és 32 bites egész számokat használnak-a tömb első elemének indexe 0. A JavaScript tömbök dinamikusak: szükség szerint növekedhetnek és zsugorodhatnak; nincs szükség rögzített méretű tömbök deklarálására azok létrehozásakor, vagy a memória újbóli kiosztására, amikor átméretezik őket.

A JavaScript tömbjei az objektumok speciális formája, és a tömbindexek alig többet jelentenek, mint a tulajdonságnevek, amelyek véletlenül egész számok.

Tömbök létrehozása

A tömb létrehozásának legegyszerűbb módja a literál, amely egy egyszerű vesszővel elválasztott tömbelemek listája szögletes zárójelben. A tömb literál értékeinek nem kell konstansoknak lenniük - ezek bármilyen kifejezések lehetnek, beleértve az objektum literálokat is:

Var üres =; // Üres tömb var számok =; // Tömb öt numerikus elemmel var misc = [1.1, igaz, "a",]; // 3 különböző típusú elem + záró vessző var bázis = 1024; var tábla =; // Tömb változókkal var arrObj = [,]; // 2 tömb belsejében, amelyek objektumokat tartalmaznak

A tömb literális szintaxisa lehetővé teszi egy opcionális záró vessző beszúrását, azaz A literal [,] egy tömbhöz illeszkedik, nem pedig hárommal.

Egy tömb létrehozásának másik módja a konstruktor hívása Tömb ()... A konstruktor háromféleképpen hívható meg:

    Hívja a konstruktőrt érvek nélkül:

    Var arr = új tömb ();

    Ebben az esetben a literálnak megfelelő üres tömb jön létre.

    Hívja meg a konstruktort egyetlen numerikus argumentummal, amely megadja a tömb hosszát:

    Var arr = új tömb (10);

    Ebben az esetben a megadott hosszúságú üres tömb jön létre. Az Array () konstruktor hívásának ezen formája használható memória előzetes lefoglalására egy tömbhöz, ha elemeinek száma előre ismert. Ne feledje, hogy ez nem tárol semmilyen értéket a tömbben.

    Kifejezetten adja meg a konstruktorhívás első két vagy több tömb elemének vagy egy nem numerikus elemének értékeit:

    Var arr = új tömb (5, 4, 3, 2, 1, "teszt");

    Ebben az esetben a konstruktor argumentumai az új tömb elemeinek értékeivé válnak. A tömb literálok használata szinte mindig könnyebb, mint az Array () konstruktor ilyen használata.

Tömb elemek olvasása és írása

A tömb elemek a kezelő segítségével érhetők el. A zárójelek bal oldalán tömbreferenciának kell lennie. Egy tetszőleges kifejezésnek, amely nem negatív egész értéket ad vissza, zárójelben kell lennie. Ez a szintaxis alkalmas egy tömb elem értékének olvasására és írására egyaránt. Ezért az alábbi JavaScript utasítások mindegyike érvényes:

// Egy tömb létrehozása egy elemmel var arr = ["world"]; // A 0. tétel olvasása var value = arr; // Írja be az értéket az 1 elembe arr = 3,14; // Írja be az értéket a 2 elembe i = 2; arr [i] = 3; // Írjon értéket a 3. elemre arr = "hello"; // Olvassa el a 0. és 2. tételt, írja be az értéket a 3. tételbe arr] = arr;

Hadd emlékeztessem önöket arra, hogy a tömbök speciális típusú objektumok. A tömb elemek eléréséhez használt szögletes zárójel pontosan ugyanúgy működik, mint az objektum tulajdonságainak eléréséhez használt szögletes zárójel. A JavaScript -értelmező a zárójelben lévő numerikus indexeket karakterláncokká alakítja át - az 1. index "1" karakterlánccá válik -, majd a karakterláncokat tulajdonságnévként használja.

Semmi különös nincs abban, hogy a numerikus indexeket karakterláncokká alakítjuk át: ugyanez történhet normál objektumokkal is:

Var obj = (); // Egyszerű objektum létrehozása obj = "one"; // Indexelje egész számokkal

A tömbök sajátossága, hogy nem negatív egész tulajdonságtulajdonságok használatakor a tömbök automatikusan meghatározzák a tulajdonság értékét hossz... Például az arr tömböt egyetlen elemmel hozták létre fent. Ezután az elemekhez értékeket rendeltek az 1, 2 és 3 indexekkel. E műveletek eredményeképpen a tömb hossztulajdonságának értéke megváltozott és egyenlő lett 4 -gyel.

Világosan meg kell különböztetni a tömb indexeit és az objektumtulajdonságokat. Minden index tulajdonságnév, de csak az egész nevű tulajdonságok indexek. Minden tömb objektum, és tetszőleges névvel adhat hozzá tulajdonságokat. Ha azonban megérinti azokat a tulajdonságokat, amelyek tömbindexek, a tömbök úgy reagálnak, hogy szükség szerint frissítik a length tulajdonság értékét.

Vegye figyelembe, hogy a negatív és a nem egész számok tömbindexként használhatók. Ebben az esetben a számokat karakterláncokká alakítják át, amelyeket tulajdonságnevekként használnak.

Tömb elemek hozzáadása és eltávolítása

Már láttuk, hogy a legegyszerűbb módja annak, hogy elemeket adjunk hozzá egy tömbhöz, ha értékeket rendelünk az új indexekhez. A módszerrel egy vagy több elemet is hozzáadhat a tömb végéhez nyom ():

Var arr =; // Üres tömb létrehozása arr.push ("zero"); // Érték hozzáadása a véghez arr.push ("one", 2); // Adjon hozzá még két értéket

Hozzáadhat egy elemet a tömb végéhez is, ha értéket rendel hozzá az arr elemhez. Ha egy elemet egy tömb elejére kíván beszúrni, használhatja a módszert váltás nélküli ()és a tömb meglévő elemei a magasabb indexekre tolódnak.

A tömb elemeit a törlés operátorral törölheti, például az objektumok szokásos tulajdonságait:

Var arr =; törlés arr; 2 in arr; // hamis, a tömb 2. indexe undefined arr.length; // 3: a delete operátor nem változtatja meg a tömb hossz tulajdonságát

Az elem eltávolítása hasonló (de kissé eltérő), ha az elemhez nem definiált értéket rendelnek. Ne feledje, hogy a delete operátor alkalmazása egy tömb elemére nem változtatja meg a length tulajdonság értékét, és nem mozdul lefelé a magasabb indexű elemekkel, hogy kitöltse az elem törlése után maradt űrt.

Ezenkívül lehetőség van arra, hogy a tömb végén lévő elemeket eltávolítsuk, ha egyszerűen új értéket rendelünk a length tulajdonsághoz. A tömböknek van módszere pop ()(ellentétben a push () -al), amely 1 -gyel csökkenti a tömb hosszát, és visszaadja az eltávolított elem értékét. Van egy módszer is műszak ()(ellentétben az unshift () -el), amely eltávolítja az elemet a tömb elején. A törlés operátorral ellentétben a shift () metódus minden elemet egy pozícióval lejjebb helyez az aktuális indexük alatt.

Végül van egy többcélú módszer összeillesztés (), amely lehetővé teszi tömb elemeinek beillesztését, törlését és cseréjét. Megváltoztatja a length tulajdonság értékét, és szükség szerint eltolja a tömb elemeit alacsonyabb vagy magasabb indexekkel. Mindezeket a módszereket egy kicsit később tárgyaljuk.

Többdimenziós tömbök

A JavaScript nem támogatja az "igazi" többdimenziós tömböket, de jó munkát végez, hogy utánozza azokat tömbök tömbjeiből. Ahhoz, hogy tömb tömb adatelemét elérje, elegendő kétszer használni az operátort.

Tegyük fel például, hogy a változó mátrix számtömb tömb. Az [x] mátrix minden eleme számtömb. Az [x] [y] kifejezési mátrix segítségével elérheti a tömb adott számát. Az alábbiakban egy konkrét példa látható, ahol kétdimenziós tömböt használunk szorzótáblaként:

// Többdimenziós tömb létrehozása var table = new Array (10); // A táblázatban 10 sor található (var i = 0; i

Tömbosztály -módszerek

Az ECMAScript 3 szabvány számos kényelmes funkciót határoz meg az Array.prototype részeként a tömbökkel való munkavégzéshez, amelyek bármely tömb módszereként elérhetők. Ezeket a módszereket a következő alfejezetekben mutatjuk be.

Csatlakozás () metódus

Az Array.join () metódus a tömb összes elemét karakterláncokká alakítja, összefűzi és visszaadja a kapott karakterláncot. Egy opcionális argumentum átadható a metódusnak egy karakterlánccal, amelyet az eredménylánc elemeinek elválasztására használnak. Ha nincs megadva elválasztó karakterlánc, vesszőt használunk. Például a következő részlet az "1,2,3" karakterláncot eredményezi:

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

Fordított () módszer

Az Array.reverse () metódus megfordítja a tömb elemeinek sorrendjét, és visszaad egy átrendezett tömböt. A permutáció közvetlenül az eredeti tömbön történik, azaz ez a módszer nem hoz létre új tömböt átrendezett elemekkel, hanem átrendezi azokat egy már meglévő tömbben. Például a következő részlet, amely a reverse () és a join () metódusokat használja, a "3,2,1" karakterláncot eredményezi:

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

Rendezés () módszer

Az Array.sort () metódus rendezi az eredeti tömb elemeit, és visszaadja a rendezett tömböt. Ha a sort () metódust argumentumok nélkül hívják meg, a rendezés betűrendben történik (összehasonlításképpen az elemeket szükség esetén ideiglenesen karakterláncokká alakítják át). A nem definiált elemek a tömb végére kerülnek.

Az összehasonlítási függvényt argumentumként adhatja át a rendezéshez (), hogy bármilyen más nem ábécé sorrendben rendezhesse. Ez a függvény beállítja, hogy két argumentuma közül melyik legyen az első a rendezett listában. Ha az első argumentumnak meg kell előznie a másodikat, az összehasonlító függvénynek negatív számot kell visszaadnia. Ha az első argumentum a második követése a rendezett tömbben, akkor a függvénynek nullánál nagyobb számot kell visszaadnia. És ha a két érték egyenértékű (azaz a sorrendjük nem fontos), akkor az összehasonlító függvénynek 0 -t kell adnia:

Var arr =; arr.sort (); // Ábécé sorrend: 1111, 222, 33, 4 arr.sort (függvény (a, b) (// Numerikus sorrend: 4, 33, 222, 1111 return ab; // Visszaadja a 0 // értéket a fajtától függően rendelés a és b)); // Rendezés hátra, a legmagasabbtól a legalacsonyabb arr.sort (függvény (a, b) (visszatérés b-a));

Figyelje meg, milyen kényelmes egy névtelen függvény használata ebben a részletben. Az összehasonlító funkciót csak itt használják, így nem kell nevet adni.

A concat () módszer

Az Array.concat () metódus új tömböt hoz létre és ad vissza, amely tartalmazza az eredeti tömb elemeit, amelyeken a concat () metódust hívták, és minden argumentum értékét átadta a concat () metódusnak. Ha ezen argumentumok egyike tömb, akkor annak elemei hozzáadódnak a visszaadott tömbhöz. Meg kell azonban jegyezni, hogy nincs tömb rekurzív konverzió tömbből egydimenziós tömbbe. A concat () metódus nem módosítja az eredeti tömböt. Az alábbiakban néhány példa látható:

Var arr =; arr.concat (4, 5); // Visszaadja az arr.concat (); // Visszaadja arr.concat (,) // Visszaadja arr.concat (4,]) // Visszaadja]

Szelet () módszer

Az Array.slice () metódus a megadott tömb egy szeletét vagy altömbjét adja vissza. A módszer két argumentuma határozza meg a visszaadott rész kezdetét és végét. A visszaadott tömb tartalmazza az első argumentumban számozott elemet és az összes további elemet a második argumentumban számozott elemig (de nem beleértve).

Ha csak egy argumentum van megadva, a visszaadott tömb minden elemet tartalmaz a kezdő pozíciótól a tömb végéig. Ha bármelyik argumentum negatív, akkor az elemszámot adja meg a tömb végéhez viszonyítva. Tehát a -1 argumentum a tömb utolsó elemének felel meg, a -3 argumentum pedig a tömb harmadik elemének a végétől. Íme néhány példa:

Var arr =; arr.szelet (0,3); // Visszaadja az arr.slice (3); // Visszaadja az arr.slice (1, -1); // Visszaadja az arr.slice (-3, -2); // Vissza fog térni

Splice () módszer

Az Array.splice () metódus egy általános módszer, amely beszúr vagy eltávolít egy tömb elemeit. A szelet () és a concat () metódusokkal ellentétben a splice () metódus módosítja az eredeti tömböt, amelyen meghívták. Ne feledje, hogy a splice () és a szelet () metódusoknak nagyon hasonló a neve, de teljesen más műveleteket hajtanak végre.

A splice () metódus eltávolíthatja az elemeket egy tömbből, új elemeket szúrhat be, vagy mindkettőt egyszerre végezheti el. A tömb elemeit szükség szerint eltoljuk, hogy a beillesztés vagy törlés után egy összefüggő szekvencia alakuljon ki.

A splice () metódus első argumentuma határozza meg a tömb pozícióját, ahonnan beszúrni és / vagy törölni kell. A második argumentum meghatározza a tömbből eltávolítandó (kivágott) elemek számát. Ha a második argumentum kihagyásra kerül, a tömb minden eleme eltávolításra kerül a megadott tömbtől a tömb végéig. A splice () metódus az eltávolított elemek tömbjét, vagy (ha egyik elemet sem távolította el) egy üres tömböt ad vissza.

A splice () metódus első két argumentuma határozza meg az eltávolítandó tömb elemeket. Ezeket az érveket tetszőleges számú további argumentum követheti, amelyek meghatározzák a tömbbe illesztendő elemeket, kezdve az első argumentumban megadott pozíciótól.

Var arr =; arr.selyem (4); // Visszaadja arr = arr.splice (1,2); // Visszaadja az arr = arr.splice (1,1); // Vissza fog térni; arr = arr =; arr.slicice (2,0, "a", "b"); // Vissza fog térni; arr =

A push () és a pop () metódusok

A push () és a pop () metódusokkal tömbökkel, például veremekkel dolgozhat. A push () metódus egy vagy több új elemet ad hozzá a tömb végéhez, és visszaadja annak új hosszát. A pop () metódus az ellenkező műveletet hajtja végre - eltávolítja a tömb utolsó elemét, csökkenti a tömb hosszát, és visszaadja az eltávolított értéket. Vegye figyelembe, hogy mindkét módszer módosítja az eredeti tömböt, ahelyett, hogy módosított másolatot hozna létre.

Az unshift () és shift () metódusok

Az unshift () és shift () metódusok nagyjából ugyanúgy viselkednek, mint a push () és a pop (), azzal a különbséggel, hogy az elemeket a tömb elején helyezik el és távolítják el, nem pedig a végén. Az unshift () metódus a meglévő elemeket a nagyobb indexek felé tolja el, hogy helyet biztosítson, hozzáadja az elemet vagy elemeket a tömb elejéhez, és visszaadja a tömb új hosszát. A shift () metódus eltávolítja és visszaadja a tömb első elemét, az összes következő elemet egy pozícióval lejjebb tolva elfoglalja a tömb elején felszabadult helyet.

Utolsó frissítés: 2018.04.09

A tömbök adatkészletekkel való használatra szolgálnak. Az új tömb () kifejezés egy tömb létrehozására szolgál:

Var myArray = új tömb ();

Van egy rövidebb módja is a tömb inicializálásának:

Var myArray =;

Ebben az esetben üres tömböt hozunk létre. De hozzá lehet adni kezdeti adatokat is:

Var emberek = ["Tom", "Alice", "Sam"]; console.log (emberek);

Ebben az esetben a myArray három elemet tartalmaz. Grafikailag a következőképpen ábrázolható:

Az indexeket arra használják, hogy egy tömb egyes elemeire hivatkozzanak. A számlálás nulláról indul, vagyis az első elemnek 0, az utolsónak pedig 2 -es indexe lesz:

Var emberek = ["Tom", "Alice", "Sam"]; console.log (emberek); // Tom var person3 = emberek; // Sam console.log (személy3); // Sam

Ha megpróbálunk elérni egy elemet a tömb méreténél nagyobb indexnél, akkor meghatározatlan lesz:

Var emberek = ["Tom", "Alice", "Sam"]; console.log (emberek); // határozatlan

Ezenkívül az index megadja a tömb elemeinek értékeit:

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

Sőt, más nyelvekkel ellentétben, mint például a C # vagy a Java, telepíthet egy olyan elemet, amelyet eredetileg nem telepített:

Var emberek = ["Tom", "Alice", "Sam"]; console.log (emberek); // undefined - csak három elem van a tömbben people = "Bob"; console.log (emberek); // Bob

Azt is érdemes megjegyezni, hogy a JavaScript számos programozási nyelvével ellentétben a tömbök nincsenek erősen gépelve, egy tömb különböző típusú adatokat tárolhat:

Var objektumok = ["Tom", 12, igaz, 3,14, hamis]; console.log (objektumok);

szóráskezelő

A szórás operátor ... lehetővé teszi, hogy egy tömbből külön vegyünk értékeket:

Legyenek számok =; console.log (... számok); // 1 2 3 4 console.log (számok); //

A spread operátor a tömb előtt van megadva. Ennek eredményeképpen a ... számok kifejezés számhalmazt ad vissza, de ez nem tömb lesz, hanem egyedi értékek.

Többdimenziós tömbök

A tömbök lehetnek egy- és többdimenziósak. A többdimenziós tömb minden eleme külön tömb lehet. A fentiekben egydimenziós tömböt tekintettünk, most hozzunk létre egy többdimenziós tömböt:

Var számok1 =; // egydimenziós tömb var számok2 = [,]; // kétdimenziós tömb

Vizuálisan mindkét tömb a következőképpen ábrázolható:

Egydimenziós tömbszámok1

Egy tömb egyetlen elemének lekéréséhez indexet is használunk:

Var tomInfo = emberek;

Csak most a tomInfo változó fog tömböt képviselni. Ahhoz, hogy egy elem beágyazott tömbbe kerüljön, a második dimenzióját kell használnunk:

Console.log ("Név:" + személyek); // Tom console.log ("Age:" + people); 25

Vagyis, ha vizuálisan ábrázolhatunk egy kétdimenziós tömböt táblázat formájában, akkor az emberek elem a táblázat cellájára hivatkozik, amely az első sor és a második oszlop metszéspontjában található (az első dimenzió 0 - egy sor, a második dimenzió - 1 - egy oszlop).

A feladatot is elvégezhetjük:

Var emberek = [["Tom", 25, hamis], ["Bill", 38, igaz], ["Alice", 21, hamis]]; emberek = 56; // külön érték hozzárendelése console.log (people); // 56 ember = ["Bob", 29, hamis]; // tömb konzol hozzárendelése.log (people); // Bob

Többdimenziós tömbök létrehozásakor nem korlátozódunk csak a kétdimenziós tömbökre, hanem használhatunk nagyméretű tömböket is:

Var számok =; számok =; // most a számok egy kétdimenziós tömb számok =; // most a számok egy háromdimenziós tömb számok = 5; // a 3D tömb első eleme 5 console.log (számok);

Üdvözlet mindenkinek, aki érdeklődik a JavaScript többdimenziós tömbjei és a rendezés iránt. A mostani kiadványban megpróbálom minden részletre kiterjedni ezt a témát.

Ezért a cikk elolvasása után megtudhatja, hogy miért használnak többdimenziós tömböket a webalkalmazásokban, hogyan jönnek létre, és hogyan kezelhetők és rendezhetők. Térjünk rá a tanulásra!

Hogyan jönnek létre és mire valók a többdimenziós tömbök?

Először is érdemes emlékezni arra, hogyan jön létre egy szabályos egydimenziós tömb.

var tömb =

Ne feledje, hogy a többdimenziós tömb tömb tömb. Egyetértek, ez tautológiának tűnik. Azonban olvassa el újra a definíciót. Valóban, a többdimenziós tömb bizonyos számú egymásba ágyazott tömbből áll.

Tekintsük a következő helyzetet. A játék elején a felhasználó beírja a nevét, és a vége után egy minősítési táblázat jelenik meg a képernyőn a játékosok nevével és adataival.

Világos, hogy az ilyen információkat adatbázisban tárolják. De amikor kihúzzuk az adatbázisból, egy többdimenziós tömböt kapunk. Végül is minden alséma tartalmazza a játékos bejelentkezési adatait és a szerzett pontok számát.

Minden így fog kinézni:

var eredmények = [["Markus", 333], ["Natasha", 211], ["Alexey", 124]];

Mint látható, az információkat heterogén módon lehet tárolni. Ez lehet karakterlánc, szám és akár páros is. Ez azért lehetséges, mert a tömbök típustalanok.

Ebben az esetben az elemekhez való hozzáférés kettős operátoron keresztül történik.

Az anyag megszilárdításához elemezzen egy kis programot.

Eredmények =

A tömbök meglehetősen kényelmes módon tárolják a megrendelt összetett adatokat feldolgozásuk során. Ezenkívül nagyon kényelmes velük dolgozni, és ugyanakkor a feldolgozás sebessége meglehetősen magas.

Adatválogatási módszerek

A JavaScript tömbjeihez van egy beépített módszer, az ún rendezés ()... Ez az eszköz nagyon rugalmas. És most elmagyarázom, miért.

Ha paraméterek nélküli módszert használ, akkor az altömböket automatikusan az első elem szerint rendezi betűrendben. Tehát híváskor eredmények.rendezés () az elemzett objektum így fog kinézni:

Alekszej, 124

Markus, 333

Natasha, 211

És ha kicseréli az egyes beágyazott tömb elemeit, akkor a következőket kapja:

124, Alekszej

211, Natasha

333, Markus

Ebben az esetben összehasonlításképpen minden elemet ideiglenesen karakterlánccá alakítunk át.

Ha egy adott feladat megoldásához olyan funkcióra van szüksége, amely nem szabványos módon rendezi az elemeket, akkor saját maga írhatja meg, és adja át paraméterként rendezés ()... Meg kell jegyezni, hogy a felhasználó által definiált függvénynek vissza kell adnia:

  • pozitív szám (általában 1 -et válasszon), ha az első megadott tétel követi a másodikat az összehasonlításban;
  • negatív szám (általában -1), ha a második kiválasztott elem követi az elsőt;
  • nulla, ha a két vizsgált érték egyenlő.

Példaként vegyük a kezdeti tömböt eredmények pontok szerint rendezni. Ezenkívül az eredményeket a legmagasabbtól a legalacsonyabbig rendezik. Ezt kétféleképpen lehet megtenni.

Az első verzióban megváltoztattam a rendezési logikát, azaz olyan helyzetben, amikor pozitív számot kell visszaadni, negatívot adok vissza, és fordítva.

Rekord táblázat:

A második módszerben azonban a rendezési logikát érintetlenül hagytam, de emellett egy másik módszert használtam - fordított ()... Ahogy a neve is sugallja, a fordított megfordítja az elemek sorrendjét.

Ezért a sort () függvény így fog kinézni:

1 2 3 4 5 függvény RecordSort (a, b) (ha (a> b) visszatér 1; egyébként ha (a< b) return -1; else return 0; }

függvény RecordSort (a, b) (ha (a> b) visszatér 1; egyébként ha (a< b) return -1; else return 0; }

Ezt követően tegyük hozzá a fenti módszert.

A következtetés hasonló módon történik.

Egy fontos pontra szeretném felhívni a figyelmet. Ezen funkciók használatakor minden változás azon a tömbön történik, amelyre alkalmazza őket. Így ha meg kell őriznie az adatok eredeti formáját, akkor hozzon létre egy másolatot, majd szerkessze azt.

Nos, szóltam a többdimenziós tömbökről és azok rendezéséről. Ha tetszett a cikk, akkor iratkozzon fel a blogra, és olvasson más hasonlóan érdekes publikációkat. Hálás lennék az újraküldésekért. A következő alkalomig!

Viszlát!

Üdvözlettel: Roman Chueshov