Matrice multidimensionale în JavaScript. Toate modalitățile de a itera printr-o matrice în JavaScript Accesarea elementelor unui javascript de matrice multidimensionale

03.04.2021 Sfat

Ultima actualizare: 09.04.2018

Matricele sunt proiectate să funcționeze cu seturi de date. Pentru a crea o matrice, utilizați noua expresie Array():

Var myArray = new Array();

Există, de asemenea, o modalitate mai scurtă de a inițializa o matrice:

Var myArray = ;

În acest caz, creăm o matrice goală. Dar puteți adăuga și date inițiale:

Var oameni = [„Tom”, „Alice”, „Sam”]; console.log(oameni);

În acest caz, myArray va avea trei elemente. Grafic poate fi reprezentat astfel:

Indecșii sunt utilizați pentru a accesa elemente individuale ale unui tablou. Numărătoarea începe de la zero, adică primul element va avea un indice de 0, iar ultimul va avea un indice de 2:

Var oameni = [„Tom”, „Alice”, „Sam”]; console.log(oameni); // Tom var person3 = oameni; // Sam console.log(persoana3); //Sam

Dacă încercăm să accesăm un element la un index mai mare decât dimensiunea matricei, vom fi nedefiniti:

Var oameni = [„Tom”, „Alice”, „Sam”]; console.log(oameni); // nedefinit

De asemenea, indexul este folosit pentru a seta valori pentru elementele matricei:

Var oameni = [„Tom”, „Alice”, „Sam”]; console.log(oameni); // Oamenii Tom = „Bob”; console.log(oameni); //Bob

Mai mult, spre deosebire de alte limbaje, cum ar fi C# sau Java, puteți instala un element care nu a fost instalat inițial:

Var oameni = [„Tom”, „Alice”, „Sam”]; console.log(oameni); // nedefinit - există doar trei elemente în matrice people = "Bob"; console.log(oameni); //Bob

De asemenea, este de remarcat faptul că, spre deosebire de o serie de limbaje de programare, Matrice JavaScript nu sunt strict tastate, o matrice poate stoca date de diferite tipuri:

Var obiecte = [„Tom”, 12, adevărat, 3,14, fals]; console.log(obiecte);

operator de răspândire

Operatorul de răspândire ... vă permite să luați valori dintr-o matrice individual:

Fie numere = ; console.log(...numerele); // 1 2 3 4 console.log(numbers); //

Operatorul de răspândire este specificat înaintea matricei. Ca rezultat, expresia...numbers va returna un set de numere, dar nu va fi o matrice, ci valori individuale.

Matrice multidimensionale

Matricele pot fi unidimensionale sau multidimensionale. Fiecare element dintr-o matrice multidimensională poate fi o matrice separată. Mai sus ne-am uitat la o matrice unidimensională, acum să creăm o matrice multidimensională:

Var numere1 = ; // matrice unidimensională var numere2 = [, ]; // matrice bidimensională

Vizual, ambele matrice pot fi reprezentate după cum urmează:

Numerele matrice unidimensionale1

A obtine element separat matrice, se folosește și indexul:

Var tomInfo = oameni;

Abia acum variabila tomInfo va reprezenta o matrice. Pentru a obține un element într-o matrice imbricată, trebuie să folosim a doua dimensiune a acestuia:

Console.log("Nume: " + persoane); // Tom console.log("Vârsta: " + oameni); // 25

Adică, dacă putem reprezenta vizual o matrice bidimensională sub forma unui tabel, atunci elementul people se va referi la celula tabelului, care se află la intersecția primului rând și a celei de-a doua coloane (prima dimensiune este 0 - rând, a doua dimensiune este 1 - coloană).

Putem face și sarcina:

Var oameni = [ [„Tom”, 25, fals], [„Bill”, 38, adevărat], [„Alice”, 21, fals] ]; persoane = 56; // atribuie o valoare separată console.log(people); // 56 de persoane = ["Bob", 29, fals]; // atribuiți matricea console.log(oameni); //Bob

Când creăm tablouri multidimensionale, nu ne limităm doar la cele bidimensionale, ci putem folosi și tablouri de dimensiuni mai mari:

Var numere = ; numere = ; // acum numere este o matrice bidimensională numere=; // acum numere este un tablou tridimensional numere = 5; // primul element al unui tablou tridimensional este 5 console.log(numbers);

În articolul precedent am vorbit despre ce este și cum să lucrăm cu el. În acest articol vom vorbi despre matrice multidimensională.

Aceasta este o matrice ale cărei unul sau mai multe elemente sunt, de asemenea, matrice. În funcție de adâncimea declarației, aceasta poate fi numită în special o matrice bidimensională (2 nivele) sau o matrice tridimensională (3 nivele) sau o matrice cu patru dimensiuni (4 nivele) și așa mai departe.

Cel mai popular, după matricea unidimensională, care este cel mai des folosită este matricea bidimensională. Să studiem asta mai detaliat.


După cum puteți vedea, elementele unei matrice bidimensionale sunt matrice unidimensionale. Dacă aceste matrice unidimensionale ar conține mai multe matrice, atunci matricea arr ar fi deja tridimensională.

De exemplu, să creăm trei tablouri simpleși umple-le cu date. Pe primul îl vom completa cu numere pare, pe al doilea cu numere impare, iar pe al treilea cu câteva date arbitrare.

//Declară trei matrice goale var evenNumbers = new Array(); //Variabila k - pentru indicii matrice evenNumbers var k = 0; var oddNumbers = new Array(); //Variabila n - pentru indicii de matrice oddNumbers var n = 0; var data = new Array ("masina", "avion", adevarat, 89, "m"); //Umpleți tabloul EvenNumbers cu numere pare pentru (var i = 1; i

Pentru a vedea ce este în interiorul matricei, puteți utiliza un instrument precum console .

De exemplu, dorim să vedem conținutul unui tablou cu numere impare oddNumbers. Pentru a face acest lucru, scrieți următoarea linie în codul de mai jos:

Console.log(oddNumbers);

Pentru a vedea rezultatul, trebuie să deschideți consola în browser. ÎN Google Chrome acest lucru se face astfel: faceți clic dreapta pe pagină și din meniul contextual selectați ultima opțiune „Vizualizare cod”, adică inspectorul. În versiunea în limba engleză, această opțiune se numește Inspect.


Și bara de instrumente pentru dezvoltatori va apărea mai jos. În ea trebuie să accesați fila Consolă.


Acum, pentru a crea o matrice bidimensională, trebuie să o declarați și să adăugați matricele unidimensionale pe care le-ați creat mai sus.

//Declară o matrice bidimensională twoDimens și completează-l var twoDimens = new Array(evenNumbers, oddNumbers, data); console.log(twoDimens);

Să ne uităm la conținutul consolei a acestei matrice.


iterând pe o matrice bidimensională

Mai întâi, să învățăm cum să accesăm elementele unui tablou bidimensional.

Ca și în cazul tablourilor individuale, elementele sunt accesate prin indecșii lor.

De exemplu, să afișăm elementul cu index 3 din tabloul cu numere impare (oddNumbers). Indicele matricei unidimensionale oddNumbers din tabloul bidimensional twoDimens este unu(1).

Document.write("Elementul de la indexul 3 din matricea numerelor impare oddNumbers este: " + twoDimens); // Element: 7

În tabloul twoDimens, accesăm elementul de la indexul 1. Elementul care se află la acel index este tabloul oddNumbers. Și în această matrice accesăm deja elementul cu indicele 3, care este numărul 7.

Acum să trecem la întrebarea cum să iteram pe o matrice bidimensională.

Iterarea pe o matrice bidimensională se face folosind o buclă dublă. De exemplu, să iterăm prin matricea noastră twoDimens.

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

Un element cu indicele " + i + " " + j + " este egal cu: " + twoDimens[i][j] + "

"); } }

În prima buclă, iterăm peste matricea twoDimens în sine. În a doua buclă, repetăm ​​deja elementul în sine (matrice). În primul rând, variabila i este egală cu 0. Prin urmare, în a doua buclă, mai întâi iterăm peste primul tablou evenNumbers, care are indicele 0. Și deja în a doua buclă, accesăm elementele acestei matrice. Astfel: douăDimensiuni[j]. Unde j variază de la 0 la lungimea matricei evenNumbers.

După enumerarea elementelor din primul tablou, revenim la prima buclă, incrementăm variabila i și procedăm la enumerarea celei de-a doua matrice oddNumbers, care are indicele 1. Și astfel enumerăm fiecare element din tabloul bidimensional twoDimens.

Acum să ne uităm la rezultatul acestei căutări:


Despre asta am vrut să vorbesc în acest articol. Acum știi cum să creezi o matrice bidimensională, cum să accesezi elementele unei matrice bidimensionale și cum să iterați printr-o matrice bidimensională. Sper că totul a fost clar. Vă doresc mult succes!

  • I. Iterarea peste matrice reale
  • pentruFiecare metodă și metode aferente
  • pentru buclă
  • Utilizarea corectă a buclei for...in
  • for...of loop (utilizarea implicită a iteratorului)
  • Utilizarea explicită a iteratorului
  • Folosind metode de iterare peste matrice reale
  • Convertiți într-o matrice reală
  • O notă despre obiectele runtime
I. Enumerarea tablourilor reale On acest moment Există trei moduri de a repeta elementele unui tablou real:
  • metoda Array.prototype.forEach ;
  • clasic pentru buclă
  • un „corect” construit pentru... în buclă.
  • În plus, în curând, odată cu apariția noului standard ECMAScript 6 (ES 6), sunt așteptate încă două metode:
  • for...of loop (utilizarea implicită a iteratorului);
  • utilizarea explicită a iteratorului.
  • 1. Metoda forEach și metodele aferente Dacă proiectul dumneavoastră este proiectat să suporte caracteristicile standardului ECMAScript 5 (ES5), puteți utiliza una dintre inovațiile acestuia - metoda forEach.

    Exemplu de utilizare:
    var a = ["a", "b", "c"]; a.forEach(funcție(intrare) ( console.log(intrare); ));
    În general, utilizarea forEach necesită conectarea bibliotecii de emulare es5-shim pentru browsere care nu acceptă nativ această metodă. Acestea includ IE 8 și mai sus versiuni timpurii, care sunt încă în uz ici și colo.

    Avantajul forEach este că nu este nevoie să declarați variabile locale pentru a stoca indexul și valoarea elementului de matrice curent, deoarece acestea sunt transmise automat funcției de apel invers ca argumente.

    Dacă sunteți îngrijorat de costul posibil al apelării unui apel invers pentru fiecare element, nu vă faceți griji și citiți asta.

    ForEach este proiectat să itereze peste toate elementele unei matrice, dar în plus față de acesta, ES5 oferă mai multe metode utile pentru a itera toate sau unele elemente plus efectuarea unor acțiuni asupra acestora:

    • fiecare - returnează adevărat dacă pentru fiecare element al matricei apelul returnează o valoare care poate fi convertită în adevărat .
    • some - returnează adevărat dacă pentru cel puțin un element al matricei, callback returnează o valoare care poate fi convertită în adevărat.
    • filter - creează o nouă matrice care include acele elemente ale matricei originale pentru care callback returnează true .
    • hartă - creează o nouă matrice constând din valorile returnate de apel invers.
    • reduce - reduce o matrice la o singură valoare, aplicând un callback fiecărui element al matricei pe rând, începând cu primul (poate fi util pentru calcularea sumei elementelor matricei și a altor funcții rezumative).
    • reduceRight - funcționează similar cu reduce, dar iterează prin elemente în ordine inversă.
    2. Pentru buclă Bine vechi pentru reguli:

    Var a = ["a", "b", "c"]; indicele var; pentru (index = 0; index< a.length; ++index) { console.log(a); }
    Dacă lungimea matricei este constantă pe tot parcursul buclei, iar bucla în sine aparține unei secțiuni critice pentru performanță a codului (ceea ce este puțin probabil), atunci puteți utiliza „mai optim” versiune pentru cu stocarea lungimii matricei:

    Var a = ["a", "b", "c"]; var index, len; pentru (index = 0, len = a.lungime; index< len; ++index) { console.log(a); }
    În teorie, acest cod ar trebui să ruleze puțin mai repede decât cel anterior.

    Dacă ordinea elementelor nu este importantă, atunci puteți merge și mai departe în ceea ce privește optimizarea și puteți scăpa de variabila pentru stocarea lungimii matricei, schimbând ordinea căutării în sens invers:

    Var a = ["a", "b", "c"]; indicele var; pentru (index = a.length - 1; index >= 0; --index) ( console.log(a); )
    Cu toate acestea, în motoarele JavaScript moderne, astfel de jocuri de optimizare nu înseamnă de obicei nimic.

    3. Utilizarea corectă a unei bucle for...in Dacă vi se recomandă să utilizați o buclă for...in, amintiți-vă că iterarea peste matrice nu este scopul pentru care este destinată. Contrar unei concepții greșite obișnuite, bucla for...in nu iterează peste indici de matrice, ci mai degrabă prin proprietăți enumerabile ale unui obiect.

    Cu toate acestea, în unele cazuri, cum ar fi iterarea peste matrice rare, pentru...in poate fi utilă, atâta timp cât luați măsuri de precauție, așa cum se arată în exemplul de mai jos:

    // a - tablou rar var a = ; a = „a”; a = „b”; a = "c"; pentru (cheie var în a) ( dacă (a.hasOwnProperty(cheie) && /^0$|^\d*$/.test(cheie) && cheie