internetul Windows. Android

Foreach JS pentru matrice și colecții. Toate metodele de stingere a stingerii în JavaScript

  • I. Creierul mașinilor actuale
    1. Metoda de predare și metodele aferente
    2. Ciclu pentru
    3. Utilizarea corectă a ciclului pentru ... în
    4. Ciclul pentru ... de utilizare implicită a iteratorului)
    5. Utilizarea explicită a iteratorului
    1. Folosind metode de stingere a matricei reale
    2. Transformarea într-o matrice reală
    3. Notă privind obiectele

I. Creierul mașinilor actuale

În prezent există trei moduri de a busta elemente ale matricei reale:
  1. metoda Array.protype.Fore ";
  2. ciclu clasic pentru;
  3. "Dreapta" ciclu construit pentru ... in.
În plus, în curând, cu apariția noului standard ECMAScript 6, se așteaptă încă două moduri:
  1. ciclu pentru ... de utilizare implicită a iteratorului);
  2. utilizarea explicită a iteratorului.

1. Metoda de predare și metodele aferente

Dacă proiectul dvs. este conceput pentru a sprijini standardele ECMASCRIPT 5 (ES5), puteți utiliza una dintre inovațiile sale - metoda de predare.

Exemplu de utilizare:
var a \u003d ["a", "b", "c"]; A.Foreceh (consola.log (intrare);));
În general, utilizarea FOREACH necesită o bibliotecă de emulare ES5-Shim pentru browserele care nu au suport nativ pentru această metodă. Acestea includ versiunile anterioare și anterioare care sunt încă folosite în unele locuri.

Avantajele de predare aparțin că nu este nevoie să declare variabilele locale pentru a stoca indicele și valoarea elementului actual al matricei, deoarece acestea sunt transmise automat la funcția de apel invers (coloane) ca argumente.

Dacă sunteți preocupat de costul posibil al apelului Columus pentru fiecare element, nu vă faceți griji și citiți-l.

Foreach este conceput pentru a se bucura de toate elementele matricei, dar, pe lângă el, ES5 oferă mai multe metode mai utile pentru bustul tuturor sau a anumitor elemente plus spectacole cu orice acțiune cu ei:

  • fiecare - returnează adevărat dacă pentru fiecare element al matricea Columus returnează valoarea dată adevărată.
  • unele - returnează adevărate, dacă cel puțin pentru un element al matricea Columus returnează valoarea dată adevărată.
  • filtrul - Creează o nouă matrice, inclusiv elementele matricei sursă pentru care coloanele revin true.
  • harta - creează o nouă matrice constând din valori ale coloanelor obscene.
  • reducerea - reduce o matrice la o singură valoare prin aplicarea coloanelor în rândul fiecărui element al matricei, pornind de la primul (poate fi util pentru calcularea cantității de elemente de matrice și a altor funcții de rezultat).
  • reduceri - funcționează în mod similar pentru a reduce, dar mișcă elementele din ordinea inversă.

2. Ciclul pentru

Bine vechi pentru direcție:

Var a \u003d ["a", "b", "c"]; Indicele var; Pentru (index \u003d 0; index< a.length; ++index) { console.log(a); }
Dacă lungimea matricei este neschimbată în timpul întregului ciclu, iar ciclul însuși aparține productivității codului (care este puțin probabil), atunci puteți utiliza o versiune "mai optimă" pentru depozitarea lungimii matricei:

Var a \u003d ["a", "b", "c"]; VAR index, len; pentru (index \u003d 0, len \u003d a.length; index< len; ++index) { console.log(a); }
Teoretic, acest cod trebuie efectuat puțin mai rapid decât cel precedent.

Dacă procedura pentru gaura elementelor nu este importantă, atunci puteți merge și mai mult în ceea ce privește optimizarea și scăpați de variabila pentru a stoca lungimea matricei prin schimbarea procedurii pentru invers:

Var a \u003d ["a", "b", "c"]; Indicele var; pentru (Index \u003d A.Length - 1; Index\u003e \u003d 0; --Index) (consolă.log (A);)
Cu toate acestea, în motoarele moderne JavaScript, astfel de jocuri cu optimizare, de obicei, nu înseamnă nimic.

3. Utilizarea corectă a ciclului pentru ... în

Dacă vă sfătuiți să utilizați pentru ... în ciclu, amintiți-vă că enumerarea de matrice nu este ceea ce este pentru ceea ce este destinat. Contrar ciclului obișnuit de concepție greșită pentru ... în ea nu este indicii de matrice, ci proprietățile enumerate ale obiectului.

Cu toate acestea, în unele cazuri, cum ar fi busting matrice rare, pentru ... în pot fi utile dacă numai precauțiile sunt urmate după cum se arată în exemplul de mai jos:

// A - Array Var AR \u003d; A \u003d "A"; A \u003d "B"; A \u003d "C"; Pentru (key var în a) (dacă (a.hasownproperty (cheie) && / \u003d $$ | ^ md * $ /. Test (cheie) && cheie<= 4294967294) { console.log(a); } }
În acest exemplu, se efectuează două verificări pe fiecare iterație a ciclului:

  1. faptul că matricea are proprietatea proprie cu cheia de nume (care nu este moștenită din prototipul său).
  2. faptul că cheia este un șir care conține o înregistrare zecimală a unui număr întreg a cărui valoare este mai mică de 4294967294. De unde vine ultimul număr? Din definiția unui indice de matrice în ES5, din care rezultă cel mai mare indice care poate avea un element în matrice: (2 ^ 32 - 2) \u003d 4294967294.
Desigur, astfel de verificări vor dura mai mult timp când ciclul este executat. Dar, în cazul unei matrice rarefiate, această metodă este mai eficientă decât ciclul de ciclu, deoarece în acest caz numai acele elemente sunt clar definite în matrice. Deci, în exemplul de mai sus, vor fi efectuate doar 3 iterații (pentru indexurile 0, 10 și 10.000) - față de 10001 în ciclu.

Pentru a nu scrie un astfel de cod de verificare voluminoasă de fiecare dată când masivul este necesar, este posibil să o aranjați ca o funcție separată:

Funcție arrayhasownindex (matrice, cheie) (retur array.hasownproperty (cheie) && / \u003d tastați $ | ^ md * $ /. Test (cheie) && cheie<= 4294967294; }
Apoi corpul ciclului din exemplu va reduce semnificativ:

Pentru (dacă (Arraysownindex (A, Key)) (consolă.log (a);))
Codul de audit discutat mai sus este universal adecvat pentru toate cazurile. Dar, în schimb, puteți utiliza o versiune mai scurtă, deși formal și nu destul de corectă, dar, totuși, potrivită pentru majoritatea cazurilor:

Pentru (i.Hasownproperty (cheie) && șir (parsint (cheie, 10)) \u003d\u003d\u003d cheie) (consolă.log (a);))

4. Ciclul pentru ... de utilizare implicită a iteratorului)

ES6, în timp ce încă se află în starea de proiect, ar trebui să intre pe iteratori în JavaScript.

Iterator. - Acesta este un protocol implementat de un obiect care determină metoda standard pentru obținerea unei secvențe de valori (finite sau infinite).
Iteratorul este un obiect în care este definită metoda următoare () - o funcție fără argumente care returnează un obiect cu două proprietăți:

  1. făcut (boolean) - este adevărat dacă iteratorul a atins sfârșitul secvenței rezultate. În caz contrar, are o valoare falsă.
  2. valoare - determină valoarea returnată de iterator. Este posibil să nu fie definită (absentă) dacă proprietatea făcută este adevărată.
Multe obiecte încorporate, inclusiv. Aceste matrice, au iteratoarele implicite. Cea mai simplă modalitate de a utiliza iterator în matricele reale este de a folosi un nou pentru ... de.

Un exemplu de utilizare pentru ... de:

Val Val; var a \u003d ["a", "b", "c"]; Pentru (Val of A) (consola.log (val);)
În exemplul de mai sus, pentru ... a unui implicit apel un iterator obiect de matrice pentru a obține fiecare valoare de matrice.

5. Utilizarea explicită a iteratorului

Iteratoarele pot fi, de asemenea, utilizate și în mod explicit, în acest caz, codul devine mult mai complicat, comparativ cu ... al ciclului. Se pare așa:

Var a \u003d ["a", "b", "c"]; var \u003d a.entries (); Intrare var; În timp ce (intrare \u003d it.next ()). Făcut) (consola.log (intrare.value);)
În acest exemplu, metoda Array.protype.entries returnează un iterator utilizat pentru a afișa valorile matricei. Fiecare intrare iterație.Value conține o serie de formular [cheie, valoare].

II. Bustul obiectelor masive

În plus față de adevăratele matrice, JavaScript se găsește și obiecte masive . Cu matrice reale, rudele lor sunt legate de faptul că au proprietatea de lungime și proprietăți cu nume sub formă de numere corespunzătoare elementelor matricei. Puteți apela la notabilul DOM Collection și argumentele pseudomassive disponibile în orice funcție / metodă.

1. Folosirea modalităților de stingere a matricei reale

Cel puțin cel mai mult, dacă nu toți, metodele de stingere a matricelor reale pot fi aplicate pentru a enumera obiectele masive.

Design-urile pentru și pentru ... în ... pot fi aplicate în mod masiv, cum ar fi obiectele exact la fel ca la matricele reale.

Foreau și alte metode de array.protype sunt, de asemenea, aplicabile obiectelor masive. Pentru a face acest lucru, utilizați File.Call sau Funcție. Aplicați apel.

De exemplu, dacă doriți să aplicați predarea proprietății nodului obiectului Childnodes, atunci acest lucru se face astfel:

Array.protype.Forech.Call (nod.cildnoduri, funcția (copil) (// face orice cu copilul obiectului));
Pentru ușurința reutilizării acestei recepții, puteți declara o legătură cu metoda Array.protype.Forech într-o variabilă separată și o utilizați ca o reducere:

// se presupune că tot codul de mai jos se află într-o zonă de vizibilitate) VAR FOREACH \u003d array.protype.forecher; // ... Forech.Call (nod.Childnoduri, funcția (copil) (// face ceva cu obiectul copilului));
Dacă un obiect asemănător matricei este un iterator, acesta poate fi utilizat în mod explicit sau implicit pentru integritatea obiectului în același mod ca și pentru matricele reale.

2. Conversia la această matrice

Există, de asemenea, un alt, foarte simplu, o modalitate de a enumera un obiect asemănător armelor: transformați-l într-o matrice reală și utilizați oricare dintre metodele de matrice existente discutate mai sus. Pentru conversie, puteți utiliza metoda Universal Array.protype.Slice, care poate fi aplicată oricărui obiect masiv. Se face foarte simplu după cum se arată în exemplul de mai jos:

Var Truearray \u003d array.protipe.slice.call (arraylikeobject, 0);
De exemplu, dacă doriți să convertiți colecția de nodfelist într-o matrice reală, aveți nevoie de aproximativ un astfel de cod:

Var divs \u003d array.protype.slice.call (document.querySelectorall ("div"), 0);
Actualizați.: După cum sa menționat în comentariile Rock și Torbasow, în ES6 în loc de Array.protype.Slice, puteți utiliza o metodă mai vizuală.

3. Notă privind obiectele de execuție a obiectelor de execuție

Dacă aplicați metode Array.Protype la obiectele din mediul de execuție (cum ar fi colecția DOM), atunci ar trebui să țineți cont de faptul că funcționarea corectă a acestor metode nu este garantată în toate mediile de execuție (inclusiv în browsere). Depinde de comportamentul unui anumit obiect într-un mediu de exercițiu specific, dacă este mai precis, din modul în care este pus în aplicare o operațiune abstractă Hasproperty în acest obiect. Problema este că standardul ES5 în sine permite posibilitatea unui comportament incorect al obiectului în ceea ce privește această operație (a se vedea § 8.6.2).

Prin urmare, este important să se testeze lucrările metodelor Array.Protype în fiecare mediu de execuție (browser), în care intenționați să utilizați aplicația dvs.

  • I. Creierul mașinilor actuale
    1. Metoda de predare și metodele aferente
    2. Ciclu pentru
    3. Utilizarea corectă a ciclului pentru ... în
    4. Ciclul pentru ... de utilizare implicită a iteratorului)
    5. Utilizarea explicită a iteratorului
  • II. Bustul obiectelor masive
    1. Folosind metode de stingere a matricei reale
    2. Transformarea într-o matrice reală
    3. Notă privind obiectele

I. Creierul mașinilor actuale

În prezent există trei moduri de a busta elemente ale matricei reale:

  1. metoda Array.protype.Fore ";
  2. ciclu clasic pentru;
  3. "Dreapta" ciclu construit pentru ... in.

În plus, în curând, cu apariția noului standard ECMAScript 6, se așteaptă încă două moduri:

  1. ciclu pentru ... de utilizare implicită a iteratorului);
  2. utilizarea explicită a iteratorului.

1. Metoda de predare și metodele aferente

Dacă proiectul dvs. este conceput pentru a sprijini standardele ECMASCRIPT 5 (ES5), puteți utiliza una dintre inovațiile sale - metoda de predare.

Exemplu de utilizare:

Var a \u003d ["a", "b", "c"]; A.Foreceh (consola.log (intrare);));

În general, utilizarea FOREACH necesită o bibliotecă de emulare ES5-Shim pentru browserele care nu au suport nativ pentru această metodă. Acestea includ versiunile anterioare și anterioare care sunt încă folosite în unele locuri.

Avantajele de predare aparțin că nu este nevoie să declare variabilele locale pentru a stoca indicele și valoarea elementului actual al matricei, deoarece acestea sunt transmise automat la funcția de apel invers (coloane) ca argumente.

Dacă sunteți preocupat de costul posibil al apelului Columus pentru fiecare element, nu vă faceți griji și citiți-l.

foreach este conceput pentru a se bucura de toate elementele matricei, dar, pe lângă el, ES5 oferă mai multe metode mai utile pentru bustul tuturor sau a anumitor elemente plus spectacole cu orice acțiune cu ei:

  • fiecare - returnează adevărat dacă pentru fiecare element al matricea Columus returnează valoarea dată adevărată.
  • unele - returnează adevărate, dacă cel puțin pentru un element al matricea Columus returnează valoarea dată adevărată.
  • filtrul - Creează o nouă matrice, inclusiv elementele matricei sursă pentru care coloanele revin true.
  • harta - creează o nouă matrice constând din valori ale coloanelor obscene.
  • reducerea - reduce o matrice la o singură valoare prin aplicarea coloanelor în rândul fiecărui element al matricei, pornind de la primul (poate fi util pentru calcularea cantității de elemente de matrice și a altor funcții de rezultat).
  • reduceri - funcționează în mod similar pentru a reduce, dar mișcă elementele din ordinea inversă.

2. Ciclul pentru

Bine vechi pentru direcție:

Var a \u003d ["a", "b", "c"]; Indicele var; Pentru (index \u003d 0; index< a.length; ++index) { console.log(a); }

Dacă lungimea matricei este neschimbată în timpul întregului ciclu, iar ciclul însuși aparține productivității codului (care este puțin probabil), atunci puteți utiliza o versiune "mai optimă" pentru depozitarea lungimii matricei:

Var a \u003d ["a", "b", "c"]; VAR index, len; pentru (index \u003d 0, len \u003d a.length; index< len; ++index) { console.log(a); }

Teoretic, acest cod trebuie efectuat puțin mai rapid decât cel precedent.

Dacă procedura pentru gaura elementelor nu este importantă, atunci puteți merge și mai mult în ceea ce privește optimizarea și scăpați de variabila pentru a stoca lungimea matricei prin schimbarea procedurii pentru invers:

Var a \u003d ["a", "b", "c"]; Indicele var; pentru (Index \u003d A.Length - 1; Index\u003e \u003d 0; --Index) (consolă.log (A);)

Cu toate acestea, în motoarele moderne JavaScript, astfel de jocuri cu optimizare, de obicei, nu înseamnă nimic.

3. Utilizarea corectă a ciclului pentru ... în

Dacă vă sfătuiți să utilizați pentru ... în ciclu, amintiți-vă că enumerarea de matrice nu este ceea ce este pentru ceea ce este destinat. Contrar ciclului obișnuit de concepție greșită pentru ... în ea nu este indicii de matrice, ci proprietățile enumerate ale obiectului.

Cu toate acestea, în unele cazuri, cum ar fi busting matrice rare, pentru ... în pot fi utile dacă numai precauțiile sunt urmate după cum se arată în exemplul de mai jos:

// A - Array Var AR \u003d; A \u003d "A"; A \u003d "B"; A \u003d "C"; Pentru (key var în a) (dacă (a.hasownproperty (cheie) && / \u003d $$$$$$ /. Test (cheie) && cheie<= 4294967294) { console.log(a); } }

În acest exemplu, se efectuează două verificări pe fiecare iterație a ciclului:

  1. faptul că matricea are proprietatea proprie cu cheia de nume (care nu este moștenită din prototipul său).
  2. faptul că cheia este un șir care conține o înregistrare zecimală a unui număr întreg a cărui valoare este mai mică de 4294967294. De unde vine ultimul număr? Din definiția unui indice de matrice în ES5, din care rezultă cel mai mare indice care poate avea un element în matrice: (2 ^ 32 - 2) \u003d 4294967294.

Desigur, astfel de verificări vor dura mai mult timp când ciclul este executat. Dar, în cazul unei matrice rarefiate, această metodă este mai eficientă decât ciclul de ciclu, deoarece în acest caz numai acele elemente sunt clar definite în matrice. Deci, în exemplul de mai sus, vor fi efectuate doar 3 iterații (pentru indexurile 0, 10 și 10.000) - față de 10001 în ciclu.

Pentru a nu scrie un astfel de cod de verificare voluminoasă de fiecare dată când masivul este necesar, este posibil să o aranjați ca o funcție separată:

Funcție arrayhasownindex (matrice, cheie) (retur array.hasownproperty (key) && / / / /& / ^d*$/.test (chei) && cheie<= 4294967294; }

Apoi corpul ciclului din exemplu va reduce semnificativ:

Pentru (dacă (Arraysownindex (A, Key)) (consolă.log (a);))

Codul de audit discutat mai sus este universal adecvat pentru toate cazurile. Dar, în schimb, puteți utiliza o versiune mai scurtă, deși formal și nu destul de corectă, dar, totuși, potrivită pentru majoritatea cazurilor:

Pentru (i.Hasownproperty (cheie) && șir (parsint (cheie, 10)) \u003d\u003d\u003d cheie) (consolă.log (a);))

4. Ciclul pentru ... de utilizare implicită a iteratorului)

ES6, în timp ce încă se află în starea de proiect, ar trebui să intre pe iteratori în JavaScript.

Iterator. - Acesta este un protocol implementat de un obiect care determină metoda standard pentru obținerea unei secvențe de valori (finite sau infinite).
Obiectul are un iterator dacă definește următoarea () metoda - funcția fără argumente, care returnează un obiect cu două proprietăți:

  1. făcut (boolean) - este adevărat dacă iteratorul a atins sfârșitul secvenței rezultate. În caz contrar, are o valoare falsă.
  2. valoare - determină valoarea returnată de iterator. Este posibil să nu fie definită (absentă) dacă proprietatea făcută este adevărată.

Multe obiecte încorporate, inclusiv. Aceste matrice, au iteratoarele implicite. Cea mai simplă modalitate de a utiliza iterator în matricele reale este de a folosi un nou pentru ... de.

Un exemplu de utilizare pentru ... de:

Val Val; var a \u003d ["a", "b", "c"]; Pentru (Val of A) (consola.log (val);)

În exemplul de mai sus, pentru ... a unui implicit apel un iterator obiect de matrice pentru a obține fiecare valoare de matrice.

5. Utilizarea explicită a iteratorului

Iteratoarele pot fi, de asemenea, utilizate și în mod explicit, în acest caz, codul devine mult mai complicat, comparativ cu ... al ciclului. Se pare așa:

Var a \u003d ["a", "b", "c"]; Intrare var; În timp ce (intrare \u003d a.Next ()). (Console.log (intrare.value);)

II. Bustul obiectelor masive

În plus față de adevăratele matrice, JavaScript se găsește și obiecte masive . Cu matrice reale, rudele lor sunt legate de faptul că au proprietatea de lungime și proprietăți cu nume sub formă de numere corespunzătoare elementelor matricei. Puteți apela la notabilul DOM Collection și argumentele pseudomassive disponibile în orice funcție / metodă.

1. Folosirea modalităților de stingere a matricei reale

Cel puțin cel mai mult, dacă nu toți, metodele de stingere a matricelor reale pot fi aplicate pentru a enumera obiectele masive.

Design-urile pentru și pentru ... în ... pot fi aplicate în mod masiv, cum ar fi obiectele exact la fel ca la matricele reale.

foreau și alte metode de array.protype sunt, de asemenea, aplicabile obiectelor masive. Pentru a face acest lucru, utilizați File.Call sau Funcție. Aplicați apel.

De exemplu, dacă doriți să aplicați predarea proprietății nodului obiectului Childnodes, atunci acest lucru se face astfel:

Array.protype.Forech.Call (nod.cildnoduri, funcția (copil) (// face orice cu copilul obiectului));

Pentru ușurința reutilizării acestei recepții, puteți declara o legătură cu metoda Array.protype.Forech într-o variabilă separată și o utilizați ca o reducere:

// se presupune că tot codul de mai jos se află într-o zonă de vizibilitate) VAR FOREACH \u003d array.protype.forecher; // ... Forech.Call (nod.Childnoduri, funcția (copil) (// face ceva cu obiectul copilului));

Dacă un obiect asemănător matricei este un iterator, acesta poate fi utilizat în mod explicit sau implicit pentru integritatea obiectului în același mod ca și pentru matricele reale.

2. Conversia la această matrice

Există, de asemenea, un alt, foarte simplu, o modalitate de a enumera un obiect asemănător armelor: transformați-l într-o matrice reală și utilizați oricare dintre metodele de matrice existente discutate mai sus. Pentru conversie, puteți utiliza metoda Universal Array.protype.Slice, care poate fi aplicată oricărui obiect masiv. Se face foarte simplu după cum se arată în exemplul de mai jos:

Var Truearray \u003d array.protipe.slice.call (arraylikeobject, 0);

De exemplu, dacă doriți să convertiți colecția de nodfelist într-o matrice reală, aveți nevoie de aproximativ un astfel de cod:

Var divs \u003d array.protype.slice.call (document.querySelectorall ("div"), 0);

3. Notă privind obiectele de execuție a obiectelor de execuție

Dacă aplicați metode Array.Protype la obiectele din mediul de execuție (cum ar fi colecția DOM), atunci ar trebui să țineți cont de faptul că funcționarea corectă a acestor metode nu este garantată în toate mediile de execuție (inclusiv în browsere). Depinde de comportamentul unui anumit obiect într-un mediu de exercițiu specific, dacă este mai precis, din modul în care este pus în aplicare o operațiune abstractă Hasproperty în acest obiect. Problema este că standardul ES5 în sine permite posibilitatea unui comportament incorect al obiectului în ceea ce privește această operație (a se vedea § 8.6.2).

Prin urmare, este important să se testeze lucrările metodelor Array.Protype în fiecare mediu de execuție (browser), în care intenționați să utilizați aplicația dvs.

Definiție și aplicare

Metoda JavaScript. pentru fiecare () Vă permite să efectuați funcția transmisă o dată pentru fiecare element din matrice într-o ordine ascendentă a indexului.

Rețineți că funcția de apel inversă a trecut ca parametru metoda pentru fiecare () Nu va fi cauzată de elemente de matrice îndepărtate sau pierdute.

Gama de elemente prelucrate utilizând metoda pentru fiecare () Instalat înainte primul Apelați o funcție de apel invers. Dacă elementele au fost adăugate la matrice după apel, atunci pe astfel de elemente, funcția nu va fi apelată.

Dacă valorile elementelor existente ale matricei sunt modificate în momentul executării, valoarea funcției transmise va fi valoarea în acel moment în care metoda pentru fiecare () le vizitează. Dacă elementele sunt eliminate înainte de vizita lor, atunci aceste elemente nu vor fi vizitate. Dacă elementele care sunt deja vizitate sunt îndepărtate în timpul trecerii de către matrice, atunci elementele ulterioare vor fi sărite.

Sprijiniți browserele

Metodă
Operă.

Iexplorer.

Margine.
pentru fiecare () dadadada9.0 da

Sintaxă JavaScript:

// numai cu caracteristica callback array..FORM (funcția ( valoarea curentă., index., arr.)); // Utilizarea unui obiect la care se poate referi cuvântul cheie array..FORM (funcția ( valoarea curentă., index., arr.), thetevalue.);

Versiunea JavaScript.

ECMAScript 5.1 (implementat în JavaScript 1.6)

Valorile parametrilor

ParametruDescriere
funcţie. Caracteristica de callback care va fi executată unu O dată pentru fiecare element din matrice. Funcția ia următorii parametri:
  • valoarea curentă. - valoarea elementului curent
  • index. - indicele matricei elementului curent.
  • arr. - o matrice la care aparține elementul curent (conform căruia apare trecerea).

Dacă ceva este transmis ca parametru al metodei, care nu este obiectul funcției, va fi cauzată excepția. Eroare de scris. Parametrul obligatoriu.

thetevalue. Un obiect care se poate referi la acest cuvânt cheie din cadrul funcției de apel invers. Dacă parametrul thetevalue. Nu se utilizează, atunci, deoarece o valoare a acestui lucru va fi folosită nedefinită (în cele din urmă acest lucru va depinde de regulile obișnuite ale contextului funcției). Parametrul opțional.

Exemplu de utilizare

În exemplul următor, vom analiza cum să obținem cantitatea de toate elementele matricei folosind JavaScript. metodă pentru fiecare ():

var array \u003d; var sum \u003d 0; // inițializați variabila care conține o valoare numerică array..Pentru fiecare ( // urmăriți toate elementele matricei de matrice Funcție sumnumber ( valoarea curentă.) { sUMĂ. += valoarea curentă.; ); Consola .log ( sUMĂ.); // afișați valoarea variabilei sumei egală cu 50

În exemplul următor, vom examina utilizarea al doilea Metoda argumentului pentru fiecare ()care indică un obiect la care putem refera utilizând acest cuvânt cheie în interiorul funcției de apel inversă:

Var numere \u003d; // inițializați o variabilă care conține o serie de valori numerice Var Squared \u003d; // inițializați o variabilă care conține o matrice goală vary myobject \u003d ( // inițializați variabila care conține un obiect Pătrat: funcția ( valoarea curentă.) { // metoda obiectului care ia valoarea Întoarcere. valoarea curentă. * valoarea curentă.; // și returnează că a fost ridicată în pătrat } } ; numere..Pentru fiecare ( // Urmăriți toate elementele matricei numerelor ( valoarea curentă.) { pătrat..push (acest lucru. Square ( valoarea curentă.)); // Adăugați la o serie de valoare de returnare pătrată a metodei pătrate a obiectului MyObject } , myObject. // obiect la care ne referim la cuvântul cheie acest lucru); Consola .log ( pătrat.); // afișați valoarea variabilei pătrate egală;

Nu cu mult timp în urmă mi-a luat JavaScript creează o matrice asociativă. Uimitor, nu a fost niciodată necesar înainte JavaScript.. M-am urcat să caut pe Internet, cum să o fac. Și a fost foarte surprins că un număr mare de oameni scriu că este imposibil, în JavaScript. Nu este. Din fericire, mulți ani de experiență mi-au sugerat că ei poartă prostii. Prin urmare, în cele din urmă am învățat cum se creează o matrice asociativă în JavaScriptCe și vă spun în acest articol.

Codul este scris în cele ce urmează array asociativă este creatăApoi, se adaugă un alt element și, în final, matricea este deplasată prin ciclu:

În acest articol am revizuit crearea masivilor asociativi, schimbarea lor, precum și bustul complet prin ciclu pentru. Personal am folosit arrays asociative în JavaScript Doar o zi, dar este necesar să știm despre o astfel de posibilitate.

Un articol în care considerăm în exemplele de utilizare a funcției și a metodei jQuery fiecare bibliotecă.

În biblioteca JQuery există 2 entități diferite cu numele fiecare.

Primul (jquery.each) este o funcție jQuery universală cu care puteți face o forță brută a unui matrice sau a elementelor obiectului.

Al doilea (fiecare) este o metodă care se aplică la setul de elemente pentru a organiza un ciclu asupra lor.

Fiecare ciclu (jquery.each). Exemple de utilizare

Funcția de sintaxă fiecare:

// matrice sau obiect - o matrice sau obiect, elemente sau proprietăți ale căror cărora trebuie sortate // callback - o funcție care va fi efectuată pentru fiecare element de matrice sau proprietate obiect $ .ech (matrice sau obiect, apel invers);

Lucrul cu fiecare funcție se va uita la exemple.

Exemplul nr. 1. Acesta va fi efectuat de către făptuitorul tuturor elementelor matricei (matrice).

// matrice, constând din 3 linii var arr \u003d ["masina", "camion", "autobuz"]; // După matricea ARR $ (ARR, funcție (index, valoare) (// acțiuni care vor fi efectuate pentru fiecare element al indexului de matrice // este indicele actual al elementului de matrice (număr) // Valoarea este valoarea elementului actual al matricei // retrageți indicele și valoarea matricei în consola consolă.log ("Index:" + index + "; valoare:" + valoare);)); / * Rezultat (în consola): Index: 0; Valoare: Indicele mașinii: 1; Adică: Indicele camionului: 2; Valoare: Autobuz * /

În codul de mai sus, fiecare funcție este utilizată pentru a enumera o matrice. Funcția are 2 parametri obligatorii. Primul parametru este esența (matrice sau obiect), elementele (proprietățile) care trebuie sortate. În acest caz, aceasta este o matrice arrow. Cel de-al doilea parametru este o funcție de apel inversă care va fi efectuată pentru fiecare element (în acest caz) matrice. Are 2 parametri care sunt disponibili în interiorul acesteia prin variabile adecvate. Primul parametru este numărul de secvență al elementului (numărătoarea inversă este efectuată de la 0). Al doilea parametru este valoarea elementului curent al matricei.

Exemplul nr. 2. În acest exemplu, vom exista toate proprietățile obiectului.


. , "OS": "Android 6.0 (marshmallow)"); // După tine de către obiectul smartphone $ .EAch (smartphone, funcție (cheie, valoare) (// acțiuni care vor fi executate pentru fiecare proprietate obiect // cheie - numele curent al proprietăților matricei // valoarea - Valoarea proprietății de obiect curent // retrage numele proprietății și valoarea sa în consola consolă.log ("proprietate:" + cheie + "; valoare:" + valoare);)); / * Rezultat (în consola): proprietate: nume; Valoare: LG G5 SE PROPRIETATE: Anul; Valoare: 2016 Proprietate: dimensiune ecran; Valoare: 5.3 Proprietate: Rezoluția ecranului; Valoare: 2560 x 1440 PROPRIETATE: OS; Adică: Android 6.0 (marshmallow) * /

Fiecare funcție poate fi utilizată pentru obiectele javascript pline de viață. Diferența dintre utilizarea sa constă numai în faptul că parametrii funcției de apel inversă au alte valori. Primul parametru stochează numele proprietăților obiectului, iar al doilea este valoarea acestei proprietăți.

Exemplu numărul 3. În ea, vom exista o structură mai complexă (luați în considerare modul de utilizare a fiecărui imbricat).

// Obiect constând din 2 proprietăți. Fiecare proprietate a acestui obiect are o matrice ca valoare, elementele din care sunt, de asemenea, obiecte Var articole \u003d ("bootstrap": [id ":" 1 "," titlu ":" Introducere "), (" ID " : "2", "Titlu": "Cum să setați"), ("ID": "3", "Titlu": "Grid"), "JavaScript": [("ID": "4", " Titlu ":" Bazele "), (" ID ":" 5 "," Titlu ":" eșantion element ")]); $ .ech (consola.log ("secțiune:" + cheie); $ .ech (date, funcție (index, valoare) (consolă.log (articol: id \u003d "+ valoare [ID"] + "; Nume \u003d "Valoare [" titlu "]);));)););););););); / * Rezultat: Secțiunea: Articolul Bootstrap: ID \u003d 1; Nume \u003d Introducere Articol: ID \u003d 2; Titlu \u003d Cum se instalează articolul: ID \u003d 3; Nume \u003d Secțiunea mesh: Articol JavaScript: ID \u003d 4; Nume \u003d Articol de bază: id \u003d 5; Nume \u003d Elemente de eșantionare * /

Cum să întrerupeți fiecare (ieși din un ciclu)?

Întreruperea (pauza) a fiecărui ciclu este efectuată utilizând instrucțiunea de retur, care trebuie să returneze valoarea falsă.

De exemplu, întrerupem executarea fiecărui ciclu după găsirea unui număr de ARR 7 în matrice:

// matrice constând din 5 numere var arr \u003d; // numărul pe care doriți să îl găsiți VAR Găsirea \u003d 7; // După matricea ARR $ .EAch (ARR, funcție (index, valoare) (// dacă numărul necesar este găsit, atunci .. dacă (valoarea \u003d\u003d\u003d găsi) (// scoateți-l în consola consolă.log ("Hurray! Numărul" + gind + "găsit! Acest număr are un index:" + index); // întrerupeți ciclul fals de întoarcere;) altceva (// altfel, pentru a afișa numărul curent de console.log la consola ("Număr curent:" + valoare);))); / * Rezultat (în consola): Număr curent: 5 Număr curent: 4 Hooray! Numărul 7 găsit! Acest număr are index: 2 * /

Cum să mergeți la următoarea iterație (fiecare continuă)?

În fiecare, întreruperea iterației curente și trecerea la următoarea se desfășoară utilizând declarația de retur, care trebuie să aibă o valoare diferită de falsă.

// o matrice constând din var mar \u003d numere; // o matrice care trebuie să conțină toate elementele matricei de artral, cu excepția valorilor Var Newarr \u003d; // După arrow Arr.ech (ARR, funcție (index, valoare) (// dacă este măsurată, atunci vă va fi dor de ea (valoarea% 2 \u003d\u003d\u003d 0) (// perve cu atât mai mult de curent Iterate și machete la următoarea întoarcere;) // Adăugați la array Newarr valoare Newarr.push (valoare);)); Consola.log ("Array Source (ARR):" + arr.join ()); Consola.log ("matrice rezultat (Newarr):" + Newarr.join ()); / * Rezultat (în consola): Array Source (ARR): 3,5,4,9,17,19,30,35,40 Gama de rezultate (Newarr): 3,5,9,17,19,35 * /

Bustați elementele curente (.ech)

Fiecare sintaxă a metodei (este selectată numai la elementele selectate):


.ech (funcția); // funcția - o funcție care va fi efectuată pentru fiecare element al obiectului curent

Vom analiza modul în care metoda funcționează în exemplul următor (prin supraîncărcarea elementelor DIV):


În exemplul de mai sus, fiecare metodă folosește setul curent (elementele selectate de selectorul $ ("div"). Ca un dispozitiv de manipulare a metodei, se efectuează întotdeauna o funcție, care va fi efectuată pentru fiecare element al apelei curente (în acest caz pentru fiecare element DIV). Această funcție are 2 parametri opționali. Unul dintre ele (index) este numărul de secvență al iterației curente și al doilea (element) - DOM de referință la elementul curent. În plus, în interiorul funcției, acest cuvânt cheie este disponibil, care, precum și al doilea parametru conține o legătură DOM la elementul curent.

De exemplu, retrageți atributul HREF pentru toate elementele și pe pagina consolei.

$ ("A"). Fiecare (funcția () (consola.log ($ (acest) .Attr ("href"));));

$ ("A"). Fiecare (Funcție () (Var Link \u003d $ (this) .Attr ("href"); dacă (link.indexof ("http: //") \u003d\u003d 0) || (link .Indexof ("https: //") \u003d\u003d 0)) (consola.log ("href references \u003d" + link);)))); // Dacă următoarele link-uri sunt situate pe pagina: // Yandex // Cum funcționează JavaScript? // bootstrap // apoi în consola vom vedea următorul rezultat: // https://www.yandex.ru/ // http://getbootstrap.com/

De exemplu, luați în considerare modul de organizare a fiecărui ciclu pe elementele DOM având numele numelui (prin deplasarea tuturor elementelor aceleiași clase).

Raspberry Pi.
un singur bord calcul
Intel Galileo Gen2.
19$
Pine A64 Plus.

De exemplu, vom analiza cum să trecem prin toate elementele de pe pagină.

De exemplu, retrageți valoarea tuturor elementelor de intrare de pe pagină.

$ ("Intrare"). Fiecare (consola.log ($ (aceasta) .val ());)););

De exemplu, prin deplasarea tuturor elementelor copilului situate în UL cu ID \u003d "Mylist" (fiecare copiilor).

  • HTML.
  • JavaScript.

Luați în considerare o metodă cu care puteți defini ultimul indice (element) din jQuery fiecare metodă.

// Selectați elementele Var Mylist \u003d $ ("ul Li"); // determinați numărul de element din eșantionul VAR Total \u003d Mylist.Length; // realizăm elementele selectate mylist.ech (funcție (index) (dacă (index \u003d\u003d\u003d total - 1) (// acesta este ultimul element din eșantion));