Matrice multidimensionale în javascript și mai multe moduri de a le sorta. Matrice în Javascript Js care scot date dintr-o matrice multidimensională

  • I. Iterarea peste matrice reale
  • pentruFiecare metodă și metode aferente
  • pentru buclă
  • Utilizare adecvată pentru...în buclă
  • 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 în 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 browserele 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 conceput pentru a repeta peste toate elementele unei matrice, dar pe lângă aceasta, ES5 oferă mai multe metode utile pentru a itera toate sau unele elemente și pentru a efectua unele acțiuni cu acestea:

    • 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 apelul 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 de matrice 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 de cod critice pentru performanță (ceea ce este puțin probabil), atunci puteți utiliza o versiune „mai optimă” a pentru care stochează lungimea 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) ( if (a.hasOwnProperty(cheie) && /^0$|^\d*$/.test(cheie) && cheie