Assosiatiivisen taulukon luominen JavaScriptissä. Kaikki tavat iteroida taulukon yli JavaScript Foreach js:ssä taulukoille ja kokoelmille

  • I. Iterointi todellisten taulukoiden yli
  • jokaiselle menetelmälle ja siihen liittyville menetelmille
  • silmukalle
  • For...in silmukan oikea käyttö
  • for... of loop (implisiittinen iteraattorin käyttö)
  • Iteraattorin selkeä käyttö
  • II. Iterointi taulukon kaltaisten objektien yli
  • Menetelmien käyttö todellisten taulukoiden iterointiin
  • Muunna todelliseksi taulukoksi
  • Huomautus suorituksenaikaisista objekteista
I. Iterointi todellisten taulukoiden yli

Tällä hetkellä on kolme tapaa iteroida todellisen taulukon elementtejä:

  • menetelmä Array.prototype.forEach ;
  • klassikko silmukalle
  • "oikein" rakennettu...silmukalle.
  • Lisäksi pian, uuden ECMAScript 6 (ES 6) -standardin myötä, odotetaan kahta uutta menetelmää:

  • for...of silmukan (implisiittinen iteraattorin käyttö);
  • iteraattorin eksplisiittinen käyttö.
  • 1. ForEach-menetelmä ja siihen liittyvät menetelmät

    Jos projektisi on suunniteltu tukemaan ECMAScript 5 (ES5) -standardin ominaisuuksia, voit käyttää yhtä sen innovaatioista - forEach-menetelmää.

    Käyttöesimerkki:

    Var a = ["a", "b", "c"]; a.forEach(funktio(merkintä) ( console.log(merkintä); ));

    Yleensä forEachin käyttö edellyttää es5-shim-emulointikirjaston yhdistämistä selaimille, jotka eivät tue tätä menetelmää. Näitä ovat IE 8 ja aiemmat, jotka ovat edelleen käytössä joissakin paikoissa.

    ForEachin etuna on, että paikallisia muuttujia ei tarvitse ilmoittaa nykyisen taulukkoelementin indeksin ja arvon tallentamiseksi, koska ne välitetään automaattisesti takaisinsoittofunktiolle argumentteina.

    Jos olet huolissasi kunkin elementin takaisinsoittojen mahdollisista kustannuksista, älä huolehdi ja lue tämä.

    forEach on suunniteltu iteroimaan kaikki taulukon elementit, mutta sen lisäksi ES5 tarjoaa useita hyödyllisiä menetelmiä kaikkien tai joidenkin elementtien iterointiin sekä joidenkin toimien suorittamiseen niille:

    • every - palauttaa tosi , jos jokaiselle taulukon elementille takaisinsoitto palauttaa arvon , joka voidaan muuntaa tosi .
    • jotkut - palauttaa tosi, jos vähintään yhdelle taulukon elementille takaisinkutsu palauttaa arvon, joka voidaan muuntaa tosiksi.
    • suodatin - luo uuden taulukon, joka sisältää ne alkuperäisen taulukon elementit, joille takaisinsoitto palauttaa tosi.
    • kartta - luo uuden taulukon, joka koostuu takaisinkutsun palauttamista arvoista.
    • vähentää - pienentää taulukon yhdeksi arvoksi soveltamalla takaisinkutsua taulukon jokaiseen elementtiin vuorollaan, alkaen ensimmäisestä (voi olla hyödyllinen taulukon elementtien ja muiden yhteenvetofunktioiden summan laskemisessa).
    • vähentääRight - toimii samalla tavalla kuin pelkistys, mutta toistuu elementtien läpi käänteisessä järjestyksessä.
    2. Silmukalle

    Vanha hyvä säännöille:

    Var a = ["a", "b", "c"]; var-indeksi; for (indeksi = 0; indeksi< a.length; ++index) { console.log(a); }

    Jos taulukon pituus on vakio koko silmukan ajan ja silmukka itse kuuluu suorituskykykriittiseen koodin osaan (mikä on epätodennäköistä), voit käyttää "optimaalisempaa" versiota, joka tallentaa taulukon pituuden. :

    Var a = ["a", "b", "c"]; var indeksi, len; for (indeksi = 0, len = a.length; indeksi< len; ++index) { console.log(a); }

    Teoriassa tämän koodin pitäisi toimia hieman nopeammin kuin edellinen.

    Jos elementtien järjestys ei ole tärkeä, voit mennä vielä pidemmälle optimoinnin suhteen ja päästä eroon taulukon pituuden tallennusmuuttujasta muuttamalla haun järjestystä päinvastaiseksi:

    Var a = ["a", "b", "c"]; var-indeksi; for (indeksi = a.length - 1; index >= 0; --index) ( console.log(a); )

    Nykyaikaisissa JavaScript-moottoreissa tällaiset optimointipelit eivät kuitenkaan yleensä tarkoita mitään.

    3. For...in silmukan oikea käyttö

    Jos sinua kehotetaan käyttämään for...in silmukkaa, muista, että taulukoiden iterointi ei ole sitä, mihin se on tarkoitettu. Vastoin yleistä väärinkäsitystä, for...in -silmukka ei iteroi taulukkoindeksien, vaan objektin lukuisten ominaisuuksien kautta.

    Joissakin tapauksissa, kuten iterointi harvassa taulukossa, for...in voi kuitenkin olla hyödyllistä, kunhan noudatat varotoimia, kuten alla olevassa esimerkissä näkyy:

    // a - harva matriisi var a = ; a = "a"; a = "b"; a = "c"; for (var key in a) ( if (a.hasOwnProperty(avain) && /^0$|^d*$/.test(avain) && avain 0) ( tulos = tosi; ) palauttaa tuloksen; ); var hyväksytty = numerot.jokainen(ehto); document.write(hyväksytty); // väärä

    Every()-metodille välitetään ehtoa kuvaava funktio parametrina. Tämä toiminto ottaa kolme parametria:

    Funktioehto(arvo, indeksi, taulukko) ( )

    Arvoparametri edustaa nykyistä iteroitavaa taulukkoelementtiä, indeksiparametri edustaa kyseisen elementin indeksiä ja taulukkoparametri välittää viittauksen taulukkoon.

    Tässä funktiossa voimme tarkistaa läpäisyn elementin arvon jonkin ehdon noudattamisen. Esimerkiksi tässä esimerkissä tarkistamme jokaisen taulukon elementin nähdäksemme, onko se suurempi kuin nolla. Jos se on suurempi, niin palautetaan arvo tosi eli elementti täyttää ehdon. Jos vähemmän, palauta false - elementti ei täytä ehtoa.

    Tämän seurauksena, kun numerot.every(condition) -metodia kutsutaan, se iteroi kaikki numerotaulukon elementit ja välittää ne yksitellen ehtofunktiolle. Jos tämä funktio palauttaa tosi kaikille elementeille, jokainen()-metodi palauttaa tosi. Jos vähintään yksi elementti ei vastaa ehtoa, jokainen()-metodi palauttaa false .

    jonkin verran()

    Some()-metodi on samanlainen kuin every()-metodi, vain se tarkistaa, vastaako vähintään yksi elementti ehtoa. Ja tässä tapauksessa some()-metodi palauttaa true . Jos taulukossa ei ole ehtoa vastaavia elementtejä, palautetaan false:

    Muuttujien luvut = [ 1, -12, 8, -4, 25, 42 ]; funktion ehto(arvo, indeksi, taulukko) ( var tulos = false; if (arvo === 8) ( tulos = tosi; ) palauttaa tuloksen; ); var hyväksytty = numerot.joku(ehto); // totta

    suodattaa()

    Filter()-menetelmä, kuten some() ja every() , hyväksyy ehtofunktion. Mutta samalla se palauttaa joukon elementtejä, jotka täyttävät tämän ehdon:

    Muuttujien luvut = [ 1, -12, 8, -4, 25, 42 ]; funktion ehto(arvo, indeksi, taulukko) ( var tulos = false; if (arvo > 0) ( tulos = tosi; ) palauttaa tuloksen; ); var filteredNumbers = numerot.suodatin(ehto); for(var i=0; i< filteredNumbers.length; i++) document.write(filteredNumbers[i] + "
    ");

    Selaimen lähtö:

    1 8 25 42

    forEach() and map()

    ForEach()- ja map()-menetelmät iteroivat elementtien yli ja suorittavat niille tiettyjä toimintoja. Voit esimerkiksi laskea taulukon numeroiden neliöt käyttämällä seuraavaa koodia:

    Muuttujien luvut = [1, 2, 3, 4, 5, 6]; for(var i = 0; i