Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Vlerësime
  • Vargjet shumëdimensionale në shembujt javascript. Rirenditja e elementeve të grupit në rend të kundërt - anasjelltas

Vargjet shumëdimensionale në shembujt javascript. Rirenditja e elementeve të grupit në rend të kundërt - anasjelltas

Vargjet janë një nga llojet më të përdorura të variablave që ju lejojnë të ruani shumë vlera të njëpasnjëshme në "një vend". Sidoqoftë, kur bëhet fjalë për JavaScript, ka shumë për të rënë.

Në këtë artikull, ne do t'i hedhim një vështrim tre teknikave pak të njohura që mund t'i zbatoni kur punoni me vargje.

1. Shtimi i vetive të personalizuara në vargje

Nëse përdorni kërkimin për të gjetur përkufizimin e një grupi në JavaScript, shumica e burimeve do të pretendojnë se një lloj i caktuar vlere variabli përfaqësohet si një objekt.

Në përgjithësi, shumë gjëra që hasim në JavaScript janë objekte. Do të jetë e drejtë të theksohet se gjuha përmban gjithashtu lloje të të dhënave "primitive", por vlerat e tyre përdoren disi në vetitë brenda objekteve.

2. Qasja në elementet e grupit brenda një cikli

Meqenëse indekset e grupeve mund të marrin vetëm vlera pozitive, origjina fillon me zero. Më pas, ne mund ta përdorim këtë indeks për të hyrë në elementin e grupit në këtë përsëritje të ciklit.

ECMAScript6 prezantoi një mënyrë për të qarkulluar nëpër një grup pa përdorur indekse, dhe përmes një cikli të ri for….

Cikli për ... i është krijuar për të përsëritur mbi elementët e një grupi pa ndikuar në indeksin e elementit.

Var ary = ["portokalli", "mollë", "lyche"]; për (le artikullin e ary) (console.log (artikull);) // "portokalli", "mollë", "lychee" Për krahasim: shfaqja e indekseve të artikujve në një cikli for. var ary = ["portokalli", "mollë", "lychee"]; për (var artikull = 0; artikull< ary.length; item++){ console.log(item); } // 0, 1, 2

3. Numri i elementeve nuk është dimensioni i grupit

Kur flasim për dimensionin e një vargu, zakonisht mendojmë se nënkuptojmë numrin e elementeve të ruajtura në të. Në fakt, kjo nuk është plotësisht e vërtetë - vetia e gjatësisë llogaritet në varësi të indeksit maksimal të elementit.

Vetia e gjatësisë është shumë e paqartë. Për t'u bindur për këtë, mjafton të shikoni manipulimet e mëposhtme:

Var ary =; ari.gjatësia = 3; konsol.log (ary.length); // 3 ary = "abcd"; konsol.log (ary.length); // 6

Në shembullin e fundit mjaftoi që elementi të vendosej në pozicionin e pestë, si rezultat i së cilës gjatësia e vargut u bë 6. Nëse mendoni se indekset nga 0 në 4 do të krijohen automatikisht, atëherë do të gaboni. Kjo mund të verifikohet duke përdorur operatorin in.

Var ary =; ari.gjatësia = 3; konsol.log (ary.length); // 3 ary = "abcd"; konsol.log (ary.length); // 6 console.log (0 në ary); // i rremë

Në këtë rast, do të ishte e drejtë ta quajmë vargun "i rrallë".

Ne gjithashtu mund të manipulojmë veçorinë gjatësi për të shkurtuar vargjet. Shembulli i mëposhtëm demonstron "humbjen" e elementit në indeksin 5 duke ulur vlerën e vetive gjatësi të grupit ary.

Var ary =; ari.gjatësia = 3; konsol.log (ary.length); // 3 ary = "abcd"; konsol.log (ary.length); // 6 ari.gjatësia = 2; konsol.log (ary.length); // 2 console.log (ary); // e papërcaktuar

Kam përshkruar vetëm një pjesë të metodave të punës me vargje.

Këtu do të flasim për shtimin, heqjen e elementeve të grupit. Rreth përmbysjes dhe renditjes së një grupi, si dhe prerjes, zëvendësimit dhe kombinimit të vargjeve.

Shtimi i elementeve në një grup.

Ju mund të përdorni veçorinë gjatësi për të shtuar elementë të rinj në grup:

Var myArray = ["Apple", "Microsoft", "Google", "Facebook"]; myArray = "Yahoo!"; console.log (myArray); // ["Apple", "Microsoft", "Google", "Facebook", "Yahoo!"]

Kjo do të funksionojë sepse elementet e grupit numërohen nga zero, dhe gjatësia nje me shume. Gjatësia gjithmonë ekuivalente indeks + 1 kështu që është shumë e lehtë të shtosh një element të ri në fund të grupit. E çuditshme, por mund të shtoni një element në një pozicion që është shumë më i madh se gjatësia e vetë grupit:

Var myArray = ["Jimi Hendrix", "Eric Clapton", "Jimmy Page", "Keith Richards"]; myArray = "Lindsey Buckingham"; console.log (myArray); // ["Jimi Hendrix", "Eric Clapton", "Jimmy Page", "Keith Richards", e papërcaktuar × 95, "Lindsey Buckingham"] console.log (myArray.length); // njeqind

Siç tregohet në komente, 95 lojëra elektronike bosh dhe një element "Lindsey Buckingham" do të shtohen në fund të grupit. Pas kësaj, marrim gjatësinë 100. Një mënyrë tjetër për të shtuar një element të ri në grup është përdorimi i metodës shtytje ():

Var myArray = ["Paul McCartney", "John Lennon", "George Harrison"]; myArray.push ("Ringo Starr", "George Martin"); console.log (myArray); // ["Paul McCartney", "John Lennon", "George Harrison", "Ringo Starr", "George Martin"]

Metoda shtytje () kthen gjithmonë gjatësinë e re të grupit (në rastin tonë 5). Ju mund të shtoni një artikull duke përdorur bashkim ():

Var myArray = ["lis", "ahu", "mongongo", "macadamia"]; myArray.splice (2, 0, "shqeme"); // shton "cashew" në index 2 console.log (myArray); // ["lis", "ahu", "shqeme", "mongongo", "macadamia"]

Kur argumenti i dytë është 0, kjo do të thotë se asnjë element nuk do të hiqet, dhe për këtë arsye çdo argument i mëpasshëm do të shtohet në grup në pozicionin e specifikuar në argumentin e parë.

Heqja e elementeve nga një grup

Heqja e një elementi është pak më e vështirë sesa shtimi i tij. Për të hequr një element nga fundi i një grupi, mund të përdorni pop ():

Var myArray = ["7-up", "Sprite", "Ginger Ale", "Lemonade"]; myArray.pop (); console.log (myArray); // ["7-up", "Sprite", "Ginger Ale"]

Metoda pop () gjithmonë heq elementin e fundit në grup dhe e kthen atë.

Ju gjithashtu mund të përdorni bashkoj () metoda:

Var myArray = ["kasava", "arrëmyshk", "lupin", "raven"]; myArray.splice (2, 1); // hiqni elementin në index 2 console.log (myArray); // ["kasava", "arrëmyshk", "raven"]

Ndryshe nga metoda bashkoj (), i cili përdoret për të shtuar elementë, këtu argumenti i dytë është 1, i cili thotë se duam të heqim elementin me indeksin 2 (ose të 3-tin me radhë). Në këtë rast, elementi "lupin" është hequr.

Ju mund të hiqni një element nga një grup duke përdorur operatorin fshij:

Var myArray = ["Byte Bandit", "Eliza", "Jeefo", "Michelangelo"]; console.log (myArray.length); // 4 fshij myArray; // hiqni Eliza console.log (myArray.length); // 4 console.log (myArray); // ["Byte Bandit", e papërcaktuar × 1, "Jeefo", "Michelangelo"]

Shënimi i parë i rëndësishëm: fshij () nuk ndryshon gjatësinë e grupit pasi elementi hiqet (edhe nëse ai ishte elementi i fundit në grup). E dyta: fshij () ndryshon vlerën e elementit të hequr në të papërcaktuar, pra kur kthehet mbrapsht myArray = i papërcaktuar.

Një mënyrë e mirë për të hequr një element nga një grup është të përdorni Array.remove të John Resig. Më poshtë është një shembull përdorimi i marrë nga faqja e tij:

// Remove Array - Nga John Resig (MIT Licencuar) Array.prototype.remove = funksion (nga, në) (var rest = this.slice ((në || nga) + 1 || this.length); this.length = nga< 0 ? this.length + from: from; return this.push.apply(this, rest); }; // Удаление 2 элемента из массива array.remove(1); // Удаление 2-ого элемента с конца массива array.remove(-2); // Удаление второго и третьего элемента array.remove(1,2); // Удаление последнего и предпоследнего элемента array.remove(-2,-1);

Ju mund të dëshironi të shikoni zgjidhjen nga Viral Patel, një nga funksionet në Underscore.js, ose grep të jQuery ().

Për më tepër, në JavaScript ka një metodë ndërrim (), i cili heq elementin e parë në grup dhe kthen vlerën e tij. Le të shohim kodin:

Var myArray = ["Matt Kramer", "Jason Bieler", "Tom Defile", "Phil Varone"]; console.log (myArray.length); // 4 var firstItem = myArray.shift (); console.log (firstItem); // Matt Kramer console.log (myArray.length); // 3 console.log (myArray); // ["Jason Bieler", "Tom Defile", "Phil Varone"]

Duke përdorur metodën ndërrim () e hoqëm artikullin, por e ruajtëm vlerën e tij në variablin tonë firstItem. Gjatësia e grupit ka ndryshuar nga 4 në 3.

Kjo metodë mund të jetë e dobishme në lidhje me metodën shtyje (). Duke i përdorur ato së bashku, ne mund të vendosim në mënyrë efikase elementet në një grup. Ne mbajmë gjatësinë e grupit duke hequr një element nga fillimi dhe duke shtuar një të ri në fund.

Përkundrazi, ne mund të përdorim metodën unshift () për të shtuar një element në fillim të grupit:

Var myArray = ["apito", "castanets", "maraca"]; console.log (myArray.length); // 3 myArray.unshift ("shiriti i ziles", "tan-tan"); console.log (myArray.length); // 5 console.log (myArray); // ["chime bar", "tan-tan", "apito", "castanets", "maraca"]

Duke përdorur metodën unshift () me metodë pop (), ju mund të vendosni radhë prapa duke shtuar elementë në fillim dhe duke hequr nga fundi i grupit.

Kthimi dhe renditja e elementeve të grupit.

Për të kthyer elementet në një grup, ne mund të përdorim anasjelltas ():

Var myArray = ["countdown", "final", "the"]; console.log (myArray); // ["countdown", "final", "the"] myArray = myArray.reverse (); console.log (myArray); // ["the", "final", "countdown"]

Renditja e elementeve të një grupi në mënyrë alfabetike është e mundur duke përdorur metodën rendit ():

Var myArray = ["ksilofonë", "zebra", "juggernauts", "avokado"]; console.log (myArray); // ["ksilofonë", "zebra", "juggernauts", "avokado"] myArray = myArray.sort (); console.log (myArray); // ["avokado", "juggernauts", "ksilofon", "zebra"]

Por kjo nuk do të funksionojë me numra.

Var myArray =; console.log (myArray); // myArray = myArray.sort (); console.log (myArray); //

Nëse keni nevojë të renditni numrat, atëherë mund të përdorni kodin e mëposhtëm:

Funksioni compareNumbers (a, b) (kthehet a - b;) var myArray =; console.log (myArray); // myArray = myArray.sort (krahasoNumrat); console.log (myArray); //

Siç tregohet më sipër me një funksion të thjeshtë të ngjitur rendit (), vargu që përmban numrat do të renditet saktë.

Kombinimi i vargjeve.

Ju mund të lidhni 2 ose më shumë vargje dhe të merrni 1 grup që përmban elementet e vargjeve të bashkuara. Për këtë ne përdorim metodën concat ():

Var myArray = ["Jay Ferguson", "Andrew Scott"]; var myArray2 = ["Chris Murphy", "Patrick Pentland"]; var myNewArray = myArray.concat (myArray2); console.log (myNewArray); // ["Jay Ferguson", "Andrew Scott", "Chris Murphy", "Patrick Pentland"]

Var myArray = ["Jay Ferguson", "Andrew Scott"]; var myNewArray = myArray.concat ("Chris Murphy", "Patrick Pentland"); console.log (myNewArray); // ["Jay Ferguson", "Andrew Scott", "Chris Murphy", "Patrick Pentland"]

Ndarja e një grupi.

Ju mund të krijoni një grup të ri që përmban 1 ose më shumë elementë nga një grup ekzistues duke përdorur funksionin fetë ():

Var myArray = ["Vokale", "Bas", "Kitar", "Dulle", "Molla", "Portokalle"]; var myNewArray = myArray.slice (4); console.log (myNewArray); // ["Mollët", "Portokalli"]

Metoda fetë () merr 1 ose 2 argumente. Nëse kalohet 1 argument (indeks), atëherë krijohet një grup i ri nga të gjithë elementët e atij të vjetër, duke filluar nga indeksi i dhënë. Nëse kalohen 2 argumente, atëherë krijohet një grup i ri nga elementët duke filluar nga argumenti i parë dhe deri te elementi në indeksin e kaluar në parametrin e dytë, pa përfshirë të fundit. Për ta bërë më të qartë, le të shohim kodin më poshtë:

Var myArray = ["Vokale", "Bas", "Kitar", "Dulle", "Molla", "Portokalle"]; var myNewArray = myArray.slice (0, 4); console.log (myNewArray); // ["Vokale", "Bas", "Kitar", "Daulle"]

Zëvendësimi i elementeve në një grup.

Ne përdorim bashkoj () për të hequr elementet nga një grup, por ne gjithashtu mund të zëvendësojmë një element në një grup me elementë të rinj:

Var myArray = ["Rivers Cuomo", "Patrick Wilson", "Brian Bell", "Matt Sharp"]; myArray.splice (3, 1, "Scott Shriner"); // zëvendëso 1 element me index 3 console.log (myArray); // ["Rivers Cuomo", "Patrick Wilson", "Brian Bell", "Scott Shriner"]

Metoda bashkoj () gjithmonë kthen një grup që përmban elementet që janë hequr. Rreshti 2 do të kthejë 1 artikull "Brian Bell".

konkluzioni

Këta artikuj kanë përshkruar metoda për të punuar me vargje në JavaScript. Disa elementë shtesë mund të shihen në MDN që nuk i kam përfshirë në këtë postim. Ata punojnë vetëm në IE9 +, kështu që mund të mos jenë të dobishëm.

Diçka për të shtuar? Apo dini ndonjë bibliotekë interesante që do t'ju ndihmojë të menaxhoni vargjet? Ju lutem komentoni!

Në këtë artikull, ne do t'i hedhim një vështrim grupit JavaScript dhe përbërësve të tij. JavaScript është krijuar në mënyrë ideale për programim. Në fakt, ai zbaton gjuhën ECMAScript (referenca ECMA-262).

Ku përdoret JavaScript? Përdoret si një gjuhë e ngulitur për të përcaktuar një shteg programor drejt një lënde aplikimi. Mund të gjendet në shfletues: përdoret atje si një gjuhë skriptimi që u jep interaktivitet faqeve të internetit.

Karakteristikat më të rëndësishme arkitekturore të këtij produkti janë shtypja dinamike dhe e dobët, menaxhimi automatik i memories, programimi perfekt, funksionet që janë objekte të kategorisë së parë.

Në përgjithësi, JavaScript u ndikua nga arsye të ndryshme, sepse gjatë zhvillimit ata donin të krijonin një gjuhë të ngjashme me Java, por të lehtë për t'u përdorur nga programuesit. Nga rruga, JavaScript nuk është në pronësi të ndonjë ndërmarrje apo organizate, gjë që e bën atë ndryshe nga një numër stilesh programimi të përdorura nga zhvilluesit e uebit.

Vini re se JavaScript është një markë e regjistruar e Oracle Corporation.

Çfarë është një Array?

Një grup quhet një grup që ruan vlera të numëruara. Çdo vlerë e tillë referohet si një komponent i grupit, dhe shifra me të cilën lidhet komponenti referohet si një indeks. Vargu JavaScript është i pashtypshëm. Kjo do të thotë se pjesët e një grupi mund të jenë të çdo lloji, dhe pjesë të ndryshme që i përkasin të njëjtit grup janë të llojeve krejtësisht të ndryshme.

Përveç kësaj, grupi JavaScript është dinamik, që do të thotë se nuk ka nevojë të deklarohet një madhësi fikse. Në fund të fundit, mund të shtoni detaje të reja në çdo kohë.

Prodhimi i vargjeve

Duke përdorur JavaScript, krijimi i një grupi nuk është aspak i vështirë. Ka dy metoda për këtë. E para përfshin krijimin e një grupi duke përdorur një kllapa fjalë për fjalë - katrore, brenda së cilës është një listë e pjesëve të ndara me presje.

  • var bosh =; // grup bosh;
  • var numrat =; // një grup me pesë komponentë dixhitalë;
  • var ndryshim =; // një grup me tre elementë të llojeve të ndryshme.

Në mënyrë tipike, kjo nuk kërkon që vlerat të jenë të thjeshta (vargjet dhe numrat). Mund të jetë gjithashtu çdo shprehje tjetër, për shembull, fjalë për fjalë lëndë, funksione të tjera dhe vargje.

Mënyra e dytë për të krijuar një grup është thirrja e projektuesit Array (). Ju mund ta ftoni atë në tre mënyra:

  • Thirrja e projektuesit pa arsye: var b - Array i ri (). Kjo parashikon krijimin e një grupi bosh ekuivalent me një literal bosh.
  • Konstruktori specifikon në mënyrë eksplicite vlerën e n komponentëve të grupit: var b = Array i ri (1, 3, 5, 8, "string", e vërtetë). Në këtë rast, projektuesit i paraqitet një listë argumentesh që shndërrohen në komponentë të grupit të ri. Argumentet shkruhen në grup në vendin ku janë specifikuar.
  • Përcaktimi i zonës për caktimin e mëvonshëm të vlerave. Kjo bëhet duke specifikuar, kur zbulohet një grup, një numër i mbyllur në kllapa: var b = varg i ri (5). Kjo metodë e zbulimit përfshin ndarjen e numrit të kërkuar të komponentëve në grup (secila prej të cilave është e shënuar si e papërcaktuar) me mundësinë e caktimit të mëvonshëm të vlerave gjatë prezantimit. Kjo formë zakonisht përdoret për të vendosur paraprakisht një grup Javascript, gjatësia e të cilit dihet paraprakisht.

Shkrimi, leximi dhe shtimi i detajeve të grupit

Mund të arrini te komponentët e grupit duke përdorur operatorin. Nga rruga, të gjithë komponentët në JavaScript numërohen duke filluar nga zero. Për të marrë artikullin e kërkuar, tregoni numrin e tij brenda. Si rregull, detajet mund të ndryshohen. Dhe për të shtuar JavaScript në grup, thjesht duhet të caktoni një vlerë të re.

Duhet të theksohet se vargjet JavaScript mund të ruajnë çdo numër elementesh të çdo lloji.

Gjatësia e vargut

Pra, ne e dimë, gjatësia e vargut është përgjithësisht një fenomen interesant. Le ta shqyrtojmë më në detaje. Të gjithë vargjet, qofshin të ndërtuara duke përdorur projektuesin e Array () ose të identifikuar duke përdorur një varg literal, kanë një veçori të gjatësisë specifike që kujton numrin total të elementeve të ruajtura. Meqenëse grupi mund të përmbajë detaje të papërcaktuara (të shënuara me të papërcaktuara), një shprehje më e saktë tingëllon si kjo: cilësia e gjatësisë është gjithmonë më e madhe për një se sa numri (indeksi) më i madh i komponentit të grupit. Cilësia e gjatësisë rregullohet automatikisht për të mbetur e saktë kur shfaqen pjesë të reja në grup.

Ju mund të përdorni veçorinë gjatësi për të shfaqur komponentin pasues të një grupi.

Pjesa e fundit ka një indeks një më pak se madhësia e grupit. Në fund të fundit, numërimi mbrapsht fillon gjithmonë nga zero. Oh, ky JavaScript! Gjatësia e grupit varet nga numri i saktë i elementeve. Prandaj, nëse nuk e dini se sa duhet të ketë, por duhet t'i referoheni elementit përfundimtar të grupit, duhet të përdorni shënimin: v.length - 1.

Përsëritja mbi detajet e një grupi

Shumë shpesh, vetia gjatësia përdoret për të përsëritur mbi detajet e një grupi në një lak:

  • var fruta = ["luleshtrydhe", "pjeshkë", "mollë", "banane"];
  • për (var I = 0; i< fruits.lenght; i++);
  • dokument.shkruaj (frutat [i] + "...").

Në këtë shembull, komponentët duket se janë të ndërthurur në mënyrë të njëpasnjëshme dhe fillojnë në pjesën e parë që është indeksuar me zero. Nëse nuk është kështu, përpara se të thërrisni secilin element të grupit, është e nevojshme të kontrolloni nëse ai është i përcaktuar.

Një lak përdoret gjithashtu ndonjëherë për të inicializuar komponentët.

Rritja dhe shkurtimi i një vargu

Pyes veten se si përdoret JavaScript për të shtuar një varg në një grup? Në procesin e punës me vargje, cilësia e gjatësisë përmirësohet automatikisht, prandaj duhet të kujdesemi vetë për këtë. Një gjë për t'u mbajtur mend është se vetia gjatësia nuk është vetëm e lexueshme, por edhe e shkruhet. Nëse cilësisë së gjatësisë i caktohet një vlerë që është më e vogël në madhësi se ajo aktuale, atëherë grupi reduktohet në vlerën e specifikuar. Çdo komponent që nuk është në intervalin e ri të indeksit hidhet poshtë dhe vlerat e tyre humbasin, edhe nëse gjatësia kthehet më vonë - vlerat nuk rikthehen.

Është mjaft e lehtë të pastrohet grupi si kjo: foo.length = 0.

Nëse cilësia e gjatësisë është më e madhe se vlera e saj aktuale, në fund të grupit do të shfaqen detaje të reja të paidentifikuara, të cilat do ta rrisin atë në madhësinë e kërkuar.

Heqja e pjesëve të modelit

Operatori i fshirjes specifikon të papërcaktuara në komponentin e grupit, por ai vazhdon të ekzistojë. Nëse ju duhet të hiqni një element nga një grup JavaScript në mënyrë që pjesët e mbetura të lëvizin në hapësirën e lirë, duhet të përdorni një nga metodat e grupit të paracaktuar. Metoda Array.shift () eliminon komponentin e parë, pop () komponentin përfundimtar dhe metoda splice () eliminon një ose një varg komponentësh kudo në grup.

Vargjet janë shumëdimensionale

Duket se e kemi kuptuar pak, vargjet dy-dimensionale janë ato që duhet të merren parasysh më pas. Mos harroni se vargjet JavaScript mund të përmbajnë elementë të tjerë si komponentë? Kjo veçori përdoret për të prodhuar vargje shumëdimensionale. Për të vizituar komponentët në një grup vargjesh, mjafton të aplikoni dy herë kllapat katrore.

Vargjet asociative

Tani le të shqyrtojmë se si marka tregtare JavaScript përdor vargje shoqëruese. Për ta bërë këtë, ne duhet të shikojmë në teori: grupet shoqëruese quhen ndonjëherë tabela hash. Falë tyre, vargjet përdoren në vend të indekseve. Përdorimi i konstrukteve të tilla është i ngjashëm me përdorimin e emrit të pronës së një objekti të thjeshtë, por në këtë rast, kur kryeni punë në një format grupi. Meqenëse nuk ka mënyra për të vepruar në vargje shoqëruese në JavaScript, ato përdoren shumë më rrallë se ato të zakonshme. Duhet të theksohet se ato mund të jenë ende të dobishme për ruajtjen e të dhënave dhe ta bëjnë më të lehtë kujtimin e detajeve që duhen aksesuar.

Prodhimi i grupit

Tani çfarë mësojmë në sistemin JavaScript? Shfaqja e një grupi në një kuti dialogu (në ekranin e monitorit), si dhe shfaqja e vlerave të përbërësve të grupit.

Nëse keni nevojë të shfaqni vlerat e të gjithë komponentëve në një program, atëherë është e përshtatshme të përdorni deklaratën for për këtë. Interesante, ndryshorja e numëruesit for rule përdoret si indeks i komponentit të grupit.

Pastrimi

Për të filtruar një grup JavaScript, duhet të zero gjatësinë e tij:

  • var myArray =;
  • myArray.gjatësia = 0.
  • qartë: funksioni () (;
  • kjo.gjatësia = 0;
  • ktheje këtë;

Shtimi dhe heqja e komponentëve

Epo, le të vazhdojmë të studiojmë më tej këtë gjuhë interesante JavaScript. Një element grupi mund të hiqet dhe shtohet në të njëjtën mënyrë si vetitë e zakonshme të objekteve të tjera. Por ka disa ndryshime: shtimi i vetive numerike mund të ndryshojë cilësinë e gjatësisë dhe modifikimi i vetive të gjatësisë mund të eliminojë cilësitë numerike. Në parim, algoritmi për vendosjen e cilësive të vargjeve është si më poshtë:

  • Kur shtoni një veti dixhitale të panjohur i, nëse gjatësia është e barabartë ose më e vogël se i, gjatësia përcaktohet të jetë i + 1.
  • Kur ndryshoni cilësinë e gjatësisë, kryhen veprimet e mëposhtme: nëse vlera e caktuar është më e vogël se zero, atëherë hidhet një Gabim Gabim. Eliminohen të gjitha cilësitë dhe indekset numerike që janë të barabarta me gjatësinë e re dhe që janë më të mëdha.

Në përgjithësi, heqja e një elementi nga një grup JavaScript nuk është e vështirë. Në fund të fundit, edhe duke vendosur gjatësinë, duhet të hiqni përbërës "shtesë" prej tij. Prandaj opsioni i pastrimit të grupit vijon. Nëse ndryshorja e caktuar e grupit të ri bosh nuk përshtatet për ndonjë arsye, por është e nevojshme të zero atë aktuale, mjafton të caktohet vlera zero në cilësinë e gjatësisë së saj.

Metodat e unshift, shift, pop dhe push

Megjithëse komponentët e grupit modifikohen manualisht, shumë rekomandojnë përdorimin e metodave të integruara për ta bërë këtë. Është kjo nuancë që garanton vlerën e saktë të cilësisë së gjatësisë dhe mungesën e boshllëqeve në grup. Nga rruga, gjatësia e saktë e cilësisë do të korrespondojë me numrin e komponentëve.

Metoda e shtytjes transferon pjesët e transferuara në fund të grupit. Metoda pop kthen komponentin përfundimtar dhe e heq atë.

Në përgjithësi, në Internet Explorer më herët se versioni i tetë, unshift mund të kthehet i papërcaktuar, në shfletues të tjerë - një vlerë e re për gjatësinë. Pra, është më mirë të mos mbështeteni në vlerën e kthimit nga unshift.

Shtimi dhe heqja e pjesëve në mes të modelit

Nëse ju duhet të fshini një grup JavaScript, çfarë duhet të bëni? Dihet se metoda e bashkimit ka nënshkrimin Array.prototype.splice.

Ai heq numrin e fshirjes së komponentëve nga grupi, duke filluar nga indeksi i fillimit. Nëse kalohen më shumë se dy argumente, atëherë të gjitha argumentet pasuese në grup vendosen në vend të atyre të anuluar. Nëse fillimi është minus, atëherë indeksi nga i cili do të rifillojë arka do të jetë i barabartë me gjatësinë + fillimin. Kthimi në grup ndodh nga elementët e hequr.

Në fakt, duke përdorur metodën e bashkimit, mund të hiqni përbërës nga mesi i grupit ose të shtoni sa të doni kudo në grup.

Në formën e tij më të thjeshtë, nëse duhet të fshini një komponent me indeksin i, duhet të kërkoni metodën e bashkimit nga grupi me parametrat i dhe 1.

Në thelb, parametri i dytë për metodën e bashkimit është opsional, por sjellja e një funksioni me një argument ndryshon në çdo shfletues.

Për shembull, në Firefox, në variantet më të fundit të Opera, në Safari dhe në Chrome, të gjitha detajet do të hiqen deri në fund të grupit.

Asnjë komponent nuk do të eliminohet në IE. Në versionet e para të Operas, sjellja nuk mund të parashikohet - një pjesë me fillimin - 1 indeksi do të hiqet. Prandaj, gjithmonë duhet të kaloni të paktën dy komponentë në këtë metodë.

Çelësat

Natyrisht, gjatë mësimit të JavaScript, vargjet shoqëruese, siç u përmend më herët, duhet gjithashtu të mbahen parasysh. Ky është një lloj informacioni abstrakt (ndërfaqe në dyqanin e të dhënave), i cili ju lejon të ruani çifte të formës "(çelës, vlerë)" dhe të mbështesni operacionet e shtimit të një çifti, si dhe heqjen dhe kërkimin e një çifti nga Celës:

GJEJ (çelës).

INSERT (vlera, çelësi).

HEQ (çelës).

Supozohet se dy çifte me çelësa të ngjashëm nuk mund të ruhen në një grup shoqërues. Në çiftin k + v, v quhet vlera e lidhur me çelësin k. Semantika dhe emrat e operacioneve të mësipërme në zbatime të ndryshme të grupeve të tilla mund të jenë të ndryshme.

Kështu, veprimi FIND (çelësi) kthen vlerën e lidhur me çelësin e dhënë, ose ndonjë objekt specifik UNDEF, që do të thotë se nuk ka asnjë vlerë të lidhur me çelësin e dhënë. Dy veprimet e tjera nuk kthejnë asgjë (përveç nëse operacioni ishte i suksesshëm).

Në përgjithësi, nga pikëpamja e ndërfaqes, është e përshtatshme të konsiderohet një grup shoqërues si një grup i thjeshtë, në të cilin jo vetëm numrat e plotë mund të përdoren si indekse, por edhe vlera të llojeve të tjera, për shembull, vargje.

Nga rruga, mbështetja për grupe të tilla është e disponueshme në shumë gjuhë programimi të interpretuara të nivelit të lartë si PHP, Perl, Ruby, Python, Tcl, JavaScript dhe të tjera. Për gjuhët që nuk kanë mjete të integruara për të punuar me grupe shoqëruese, një numër i madh i zbatimeve janë krijuar në formën e bibliotekave.

Një shembull i një grupi shoqërues është një direktori telefonike. Në këtë variant, vlera është kompleksi "F. Emri + adresa ", dhe çelësi - numri i telefonit. Një numër telefoni ka një pronar, por një person mund të zotërojë disa numra.

Zgjerime shoqëruese

Duhet të theksohet se zgjerimet më të famshme përfshijnë veprimet e mëposhtme:

  • SEDO - "ecni" nëpër të gjitha çiftet që do të shpëtohen.
  • CLEAR - hiqni të gjitha të dhënat.
  • MIN - gjeni çiftin me vlerën më të ulët të çelësit.
  • MAX - gjeni çiftin me vlerën kryesore më të lartë.

Në dy opsionet e fundit, duhet të specifikoni veprimin e krahasimit në çelësat.

Implementimet e vargjeve shoqëruese

Ka shumë zbatime të ndryshme të grupit asociativ. Zbatimi më i zakonshëm mund të bazohet në një grup të thjeshtë, përbërësit e të cilit janë çifte (vlera, çelësi). Për të përshpejtuar operacionet e kërkimit, mund t'i renditni përbërësit e këtij grupi sipas çelësit dhe t'i gjeni duke përdorur Por kjo do të rrisë periudhën kohore të nevojshme për të shtuar një çift të ri, pasi do t'ju duhet të "ndani" përbërësit e grupit sipas renditjes. për të paketuar një rekord të ri në qelizën boshe që shfaqet.

Implementimet më të njohura bazohen në pemë të ndryshme kërkimi. Për shembull, në një dhomë leximi tipike C ++ STL, kontejneri i hartës zbatohet në bazë të një peme të zezë-kuqe. Në stilet e Ruby, Tcl, Python, përdoret një nga llojet e tabelave hash. Ka edhe zbatime të tjera.

Në përgjithësi, çdo zbatim ka avantazhet dhe disavantazhet e veta. Është e rëndësishme që të tre veprimet të kryhen si mesatarisht ashtu edhe në nuancën më të keqe gjatë një periudhe prej O (log n), ku n është numri aktual i çifteve të ruajtura. Për pemët e kërkimit të përputhur (përfshirë pemët e kuqe-zezë) ky kusht plotësohet.

Dihet se në implementimet e bazuara në tabelat hash, koha mesatare përcaktohet si O (1), e cila është më e mirë se në veprimet e bazuara në pemët e kërkimit. Sigurisht, kjo nuk garanton ekzekutimin me shpejtësi të lartë të operacioneve individuale: kohëzgjatja e një INSERT shënohet në rastin më të keq si O (n). Procesi INSERT kërkon një kohë të gjatë, kur faktori i mbushjes arrin pikën më të lartë dhe bëhet i nevojshëm rindërtimi i indeksit të tabelës hash.

Meqë ra fjala, këto lista hash janë të këqija sepse nuk mund të përdoren për të kryer veprime të shpejta shtesë MAX, MIN dhe algoritmin për anashkalimin e të gjitha çifteve të ruajtura sipas renditjes zvogëluese ose rritjes së çelësave.

  • Përkthimi

Shumica e aplikacioneve që po zhvillohen sot duhet të ndërveprojnë me një lloj grupi të dhënash. Trajtimi i artikujve në koleksione është një operacion i zakonshëm që mund të keni hasur. Kur punoni, për shembull, me vargje, mund të përdorni, pa hezitim, ciklin e zakonshëm for, i cili duket diçka si kjo: për (var i = 0; i< value.length; i++){} . Однако, лучше, всё-таки, смотреть на вещи шире.

Supozoni se duhet të shfaqim një listë produktesh dhe, nëse është e nevojshme, ta ndajmë atë në kategori, ta filtrojmë, ta kërkojmë, të modifikojmë këtë listë ose elementët e saj. Mund t'ju duhet të kryeni shpejt disa llogaritje që përfshijnë elementët e listës. Le të themi se duhet të shtoni diçka në diçka, të shumëzoni diçka me diçka. A mund të gjeni mjete në JavaScript që e bëjnë më të shpejtë dhe më të përshtatshëm zgjidhjen e problemeve të tilla sesa përdorimi i një qarku të rregullt për?

Në fakt, JavaScript ofron lehtësira të tilla. Disa prej tyre janë diskutuar në material, përkthimin e të cilit ju paraqesim sot në vëmendje. Në veçanti, ne po flasim për operatorin e zgjerimit, për ... e ciklit, dhe përfshin metodat (), disa (), çdo (), filtri (), harta () dhe reduktimi (). Këtu do të flasim kryesisht për vargje, por teknikat e diskutuara këtu zakonisht janë të përshtatshme për të punuar me lloje të tjera objektesh.

Duhet të theksohet se përmbledhjet e qasjeve moderne të zhvillimit në JS zakonisht përfshijnë shembuj të përgatitur duke përdorur funksionet me shigjeta. Ndoshta nuk i përdorni ato shumë shpesh - ndoshta sepse nuk ju pëlqejnë, ndoshta sepse nuk dëshironi të shpenzoni shumë kohë duke mësuar diçka të re, ose ndoshta thjesht nuk funksionojnë për ju. Prandaj, këtu, në shumicën e situatave, do të shfaqen dy opsione për të kryer të njëjtat veprime: përdorimi i funksioneve të zakonshme (ES5) dhe përdorimi i funksioneve me shigjeta (ES6). Për funksionet e reja me shigjeta, vini re se funksionet me shigjeta nuk janë ekuivalente me deklaratat e funksionit dhe shprehjet e funksionit. Nuk ia vlen të zëvendësohet njëra me tjetrën. Në veçanti, kjo për faktin se fjala kyçe kjo sillet ndryshe në funksionet e zakonshme dhe me shigjeta.

1. Operatori i zgjerimit

Operatori spread ju lejon të "zgjeroni" vargjet duke zëvendësuar elementet e tyre në vend të vargjeve në vendin ku përdoret ky operator. Një qasje e ngjashme është propozuar për fjalë për fjalë objektesh.

▍ Përparësitë e Operatorit të Përhapjes

  • Kjo është një mënyrë e thjeshtë dhe e shpejtë për të "tërhequr" elementët e tij individualë nga një grup.
  • Ky operator është i përshtatshëm për të punuar me vargje dhe literale objektesh.
  • Është një metodë e shpejtë dhe intuitive për të punuar me argumentet e funksionit.
  • Operatori i përhapjes nuk zë shumë hapësirë ​​në kod - duket si tre pika (...).

▍ Shembull

Le të themi se ju keni për detyrë të rendisni ëmbëlsirat tuaja të preferuara pa përdorur një lak. Me operatorin e përhapjes, kjo bëhet si kjo:

2. Për… e ciklit

For... e deklaratës është menduar për kalimin e objekteve të përsëritura. Ai u jep akses elementeve individuale të objekteve të tilla (në veçanti, elementeve të vargjeve), gjë që, për shembull, u lejon atyre të modifikohen. Mund të konsiderohet një zëvendësim për ciklin e rregullt for.

▍Përparësitë e lakit për…

  • Kjo është një mënyrë e thjeshtë për të shtuar ose përditësuar artikujt e koleksionit.
  • Cikli for… i ju lejon të kryeni llogaritje të ndryshme duke përdorur elementë (mbledhje, shumëzim, e kështu me radhë).
  • Është i përshtatshëm për ta përdorur atë kur duhet të kontrolloni ndonjë kusht.
  • Përdorimi i tij çon në kod më të pastër dhe më të lexueshëm.

▍ Shembull

Supozoni se keni një strukturë të dhënash që përshkruan përmbajtjen e një kutie veglash dhe dëshironi t'i shfaqni ato mjete. Ja se si ta bëni këtë me një lak për ...

3. Metoda përfshin ().

Metoda përfshin () përdoret për të kontrolluar praninë e një elementi të caktuar në koleksion, në veçanti, për shembull, një varg të caktuar në një grup që përmban vargje. Kjo metodë kthen true ose false në varësi të rezultateve të kontrollit. Kur e përdorni, duhet të kihet parasysh se është i ndjeshëm ndaj shkronjave të vogla. Nëse, për shembull, koleksioni ka një element të vargut SCHOOL, dhe kontrolli për praninë e tij duke përdorur përfshirjen () kryhet në vargun e shkollës, metoda do të kthehet false.

▍ Përparësitë e metodës përfshin ().

  • Metoda përfshin () është e dobishme për krijimin e mekanizmave të thjeshtë të marrjes së të dhënave.
  • Ai i jep zhvilluesit një mënyrë intuitive për të përcaktuar nëse disa të dhëna janë në një grup.
  • Është i përshtatshëm për ta përdorur atë në shprehje të kushtëzuara për modifikimin, filtrimin e elementeve dhe për kryerjen e operacioneve të tjera.
  • Përdorimi i tij çon në përmirësimin e lexueshmërisë së kodit.

▍ Shembull

Supozoni se keni një garazh të përfaqësuar nga një grup me një listë makinash dhe nuk e dini nëse ka një makinë të caktuar në këtë garazh apo jo. Për të zgjidhur këtë problem, duhet të shkruani një kod që ju lejon të kontrolloni praninë e një makine në garazh. Le të përdorim metodën përfshin ():

4. Metoda disa ().

Metoda some () ju lejon të kontrolloni nëse disa nga elementët që kërkoni ekzistojnë në grup. Ai, bazuar në rezultatet e kontrollit, kthen true ose false. Është e ngjashme me metodën përfshin () më sipër, me përjashtim të faktit që argumenti i tij është një funksion dhe jo, për shembull, një varg i rregullt.

▍Disa pika të forta të metodës ().

  • Metoda some () na lejon të kontrollojmë nëse grupi përmban të paktën një nga elementët me interes.
  • Ai kontrollon gjendjen duke përdorur funksionin e kaluar tek ai.
  • Kjo metodë është e përshtatshme për t'u përdorur.

▍ Shembull

Supozoni se jeni pronar i një klubi, dhe në përgjithësi, nuk jeni të interesuar se kush vjen saktësisht në klubin tuaj. Megjithatë, disa vizitorë nuk lejohen të hyjnë në klub, pasi janë të prirur për konsum të tepruar të pijeve alkoolike, të paktën nëse ndodhen vetë në lokalin tuaj dhe nuk ka njeri me ta për t'u kujdesur për ta. Në këtë rast, një grup vizitorësh mund të hyjnë në klub vetëm nëse të paktën njëri prej tyre është të paktën 18 vjeç. Për të automatizuar këtë lloj kontrolli, ne do të përdorim metodën disa (). Më poshtë, aplikimi i tij është demonstruar në dy versione.

ES5

ES6

5. Metoda e çdo ().

Çdo metodë () ecën nëpër grup dhe kontrollon secilin prej elementeve të tij kundrejt një kushti të caktuar, duke e kthyer true nëse të gjithë elementët e grupit plotësojnë kushtin, dhe false ndryshe. Do të vini re se është e ngjashme me metodën disa ().

▍ Përparësitë e çdo metode ().

  • Metoda çdo () ju lejon të kontrolloni nëse të gjithë elementët në një grup përputhen me një kusht.
  • Kushtet mund të vendosen duke përdorur funksionet.
  • Ai promovon një qasje deklarative të programimit.

▍ Shembull

Le të kthehemi te shembulli i mëparshëm. Aty lejuat në klub vizitorë nën moshën 18 vjeç, por dikush shkroi një deklaratë në polici, pas së cilës ju u futët në një situatë të pakëndshme. Pasi gjithçka u rregullua, ju vendosët që nuk ju nevojiteshin të gjitha këto dhe shtrënguat rregullat për të vizituar klubin. Tani një grup vizitorësh mund të hyjnë në klub vetëm nëse mosha e secilit anëtar të grupit është të paktën 18 vjeç. Ashtu si herën e kaluar, ne do të shqyrtojmë zgjidhjen e problemit në dy versione, por këtë herë do të përdorim metodën çdo ().

ES5

ES6

6. Metoda e filtrit ().

Metoda e filtrit () ju lejon të krijoni, bazuar në një grup të caktuar, një grup të ri që përmban vetëm ato elemente të grupit origjinal që plotësojnë kushtin e specifikuar.

▍ Metoda e pikave të forta të filtrit ().

  • Metoda e filtrit () shmang modifikimin e grupit origjinal.
  • Kjo ju lejon të hiqni qafe elementët e panevojshëm.
  • Ai përmirëson lexueshmërinë e kodit tuaj.

▍ Shembull

Supozoni se duhet të zgjidhni nga lista e çmimeve vetëm ato që janë më të mëdha ose të barabarta me 30. Le të përdorim metodën e filtrit () për të zgjidhur këtë problem.

ES5

ES6

7. Metoda e hartës ().

Metoda map () është e ngjashme me metodën e filtrit () në atë që kthen gjithashtu një grup të ri. Megjithatë, përdoret për të modifikuar elementët e grupit origjinal.

▍Përparësitë e metodës së hartës ().

  • Metoda map () shmang nevojën për të modifikuar elementët e grupit origjinal.
  • Është i përshtatshëm për të modifikuar elementët e grupit me ndihmën e tij.
  • Ai përmirëson lexueshmërinë e kodit tuaj.

▍ Shembull

Supozoni se keni një listë të produkteve me çmime. Menaxheri juaj ka nevojë për një listë të re produktesh me çmime të reduktuara me 25%. Le të përdorim metodën e hartës () për të zgjidhur këtë problem.

ES5

ES6

8. metoda e reduktimit ().

Metoda e reduktimit (), në formën e saj më të thjeshtë, ju lejon të përmbledhni elementet e vargjeve numerike. Me fjalë të tjera, ai e konverton grupin në një vlerë të vetme. Kjo lejon që ajo të përdoret për të kryer llogaritje të ndryshme.

▍Përparësitë e metodës së reduktimit ().

  • Metoda e reduktimit () mund të përdoret për të llogaritur shumën ose mesataren e elementeve në një grup.
  • Kjo metodë shpejton dhe thjeshton llogaritjet.

▍ Shembull

Supozoni se duhet të llogaritni shpenzimet tuaja për javën, të cilat ruhen në një grup. Le ta zgjidhim këtë problem duke përdorur metodën e reduktimit ().

ES5

ES6

Shto etiketa
  • Përkthimi
  • I. Përsëritja mbi vargje reale
    1. Për çdo metodë dhe metoda të ngjashme
    2. Për lak
    3. Përdorimi i saktë i për ... në ciklin
    4. Për ... e ciklit (përdorimi i nënkuptuar i një përsëritës)
    5. Përdorimi i qartë i një përsëritësi
    1. Përdorimi i metodave për të përsëritur mbi vargje reale
    2. Konvertimi në një grup real
    3. Një shënim mbi objektet e ekzekutimit

I. Përsëritja mbi vargje reale

Për momentin, ekzistojnë tre mënyra për të përsëritur mbi elementët e një grupi real:
  1. Array.prototype.forÇdo metodë;
  2. klasik për lak;
  3. Një "i formuar mirë" për ... në lak.
Përveç kësaj, së shpejti, me ardhjen e standardit të ri ECMAScript 6 (ES 6), priten edhe dy mënyra të tjera:
  1. për ... e ciklit (përdorimi i nënkuptuar i një përsëritësi);
  2. përdorimi i qartë i një përsëritësi.

1. Metoda përÇdo dhe metodat përkatëse

Nëse projekti juaj është krijuar për të mbështetur aftësitë e standardit ECMAScript 5 (ES5), ju mund të përdorni një nga risitë e tij - metodën forEach.

Shembull përdorimi:
var a = ["a", "b", "c"]; a.forÇdo (funksioni (hyrja) (konsola.log (hyrja);));
Në përgjithësi, përdorimi i forEach kërkon lidhjen e bibliotekës emulative es5-shim për shfletuesit që nuk kanë mbështetje vendase për këtë metodë. Këto përfshijnë IE 8 dhe më herët, të cilat janë ende në përdorim sot.

Avantazhi i forEach është se nuk ka nevojë të deklarohen variabla lokale për të ruajtur indeksin dhe vlerën e elementit aktual të grupit, pasi ato kalohen automatikisht në funksionin e kthimit të thirrjes si argumente.

Nëse jeni të shqetësuar për koston e mundshme të thirrjes për çdo artikull, mos u shqetësoni dhe lexoni këtë.

ForEach është krijuar për të përsëritur mbi të gjithë elementët e një grupi, por përveç tij ES5 ofron disa metoda më të dobishme për përsëritjen mbi të gjithë ose disa nga elementët, plus kryerjen e disa veprimeve me ta:

  • every - kthen true nëse për çdo element të grupit kthimi i thirrjes kthen një vlerë që është hedhur në true.
  • some - kthen true nëse për të paktën një element të grupit kthimi i thirrjes kthen një vlerë që është hedhur në true.
  • filtër - krijon një grup të ri që përfshin ato elemente të grupit origjinal për të cilët kthimi i thirrjes kthehet true.
  • harta - krijon një grup të ri të përbërë nga vlerat e kthyera nga kthimi i thirrjes.
  • zvogëlon - redukton një grup në një vlerë të vetme, duke aplikuar një kthim kthimi në radhë për secilin element të grupit, duke filluar nga i pari (mund të jetë i dobishëm për llogaritjen e shumës së elementeve të grupit dhe funksioneve të tjera përfundimtare).
  • ReduceRight - Punon ngjashëm me reduktimin, por përsëritet mbi elementët në rend të kundërt.

2. Cikli for

E vjetër e mirë për rregullat:

Var a = ["a", "b", "c"]; indeksi var; për (indeks = 0; indeks< a.length; ++index) { console.log(a); }
Nëse gjatësia e grupit mbetet e pandryshuar gjatë gjithë ciklit, dhe vetë cikli i përket një pjese kodi kritik për performancën (gjë që nuk ka gjasa), atëherë mund të përdorni versionin "më optimal" të për me ruajtjen e gjatësisë së grup:

Var a = ["a", "b", "c"]; indeksi var, len; për (indeks = 0, len = a.gjatësi; indeks< len; ++index) { console.log(a); }
Në teori, ky kod duhet të funksionojë pak më shpejt se ai i mëparshmi.

Nëse rendi i përsëritjes nuk është i rëndësishëm, atëherë mund të shkoni edhe më tej në drejtim të optimizimit dhe të hiqni qafe variablin për ruajtjen e gjatësisë së grupit duke ndryshuar rendin e përsëritjes në të kundërtën:

Var a = ["a", "b", "c"]; indeksi var; për (indeks = a.gjatësi - 1; indeks> = 0; --indeks) (konsol.log (a);)
Sidoqoftë, në motorët modernë JavaScript, këto lojëra të optimizuara zakonisht nuk nënkuptojnë asgjë.

3. Përdorimi i saktë i për ... në ciklin

Nëse ju këshillohet të përdorni një për ... në ciklin, mbani mend se përsëritja mbi vargje nuk është ajo për të cilën synohet. Ndryshe nga keqkuptimi i zakonshëm, cikli for ... në nuk përsëritet mbi indekset e grupit, por mbi vetitë e numëruara të objektit.

Megjithatë, në disa raste, të tilla si përsëritja mbi vargje të rralla, për ... në mund të jetë e dobishme, me kusht që të merrni disa masa paraprake, siç tregohet në shembullin më poshtë:

// a është një grup i rrallë var a =; a = "a"; a = "b"; a = "c"; për (kyç var në a) (nëse (a.hasOwnProperty (çelësi) && /^0$|^\d*$/.test(kyç) && kyç<= 4294967294) { console.log(a); } }
Në këtë shembull, në çdo përsëritje të ciklit, kryhen dy kontrolle:

  1. që grupi ka vetinë e tij të quajtur çelës (jo i trashëguar nga prototipi i tij).
  2. ai çelës është një varg që përmban shënimin dhjetor të një numri të plotë vlera e të cilit është më e vogël se 4294967294. Nga vjen numri i fundit? Nga përkufizimi i një indeksi vargu në ES5, që nënkupton se indeksi më i madh që mund të ketë një element në një grup është (2 ^ 32 - 2) = 4294967294.
Sigurisht, kontrolle të tilla do të marrin kohë shtesë gjatë ekzekutimit të ciklit. Por në rastin e një grupi të rrallë, kjo metodë është më efikase se një cikli for, pasi në këtë rast vetëm ato elemente që janë të përcaktuara në mënyrë eksplicite në grup përsëriten. Pra, në shembullin e mësipërm, do të kryhen vetëm 3 përsëritje (për indekset 0, 10 dhe 10000) - kundrejt 10001 në ciklin for.

Për të mos shkruar një kod kaq të rëndë kontrollesh sa herë që duhet të përsërisni mbi një grup, mund ta dizajnoni atë si një funksion të veçantë:

Funksioni arrayHasOwnIndex (array, çelës) (ktheje grupin.hasOwnProperty (çelës) && /^0$|^\d*$/.test(çelësi) && kyç<= 4294967294; }
Atëherë trupi i lakut nga shembulli do të reduktohet ndjeshëm:

Për (çelësi në a) (if (arrayHasOwnIndex (a, çelës)) (console.log (a);))
Kodi i mësipërm i kontrolleve është universal, i përshtatshëm për të gjitha rastet. Por në vend të kësaj, mund të përdorni një version më të shkurtër, megjithëse formalisht jo plotësisht i saktë, por megjithatë i përshtatshëm për shumicën e rasteve:

Për (çelësi në a) (nëse (a.hasOwnProperty (kyç) && String (parseInt (kyç, 10)) === çelës) (konsole.log (a);))

4. Për ... e ciklit (përdorimi i nënkuptuar i një përsëritës)

ES6, ndërsa është ende në statusin e draftit, duhet të prezantojë përsëritësit në JavaScript.

Një përsëritës është një protokoll i zbatuar nga objekti që përcakton një mënyrë standarde për të marrë një sekuencë vlerash (të fundme ose të pafundme).
Një iterator është një objekt në të cilin përcaktohet metoda tjetër () - një funksion pa argumente që kthen një objekt me dy veti:

  1. bërë (boolean) - e vërtetë nëse përsëritësi ka arritur në fund të sekuencës që përsëritet. Përndryshe, false.
  2. vlera - përcakton vlerën e kthyer nga përsëritësi. Mund të jetë e papërcaktuar (mungon) nëse prona e bërë është e vërtetë.
Shumë objekte të integruara, përfshirë. vargjet reale kanë përsëritës të paracaktuar. Mënyra më e thjeshtë për të përdorur një përsëritës në vargje reale është përdorimi i ri për ... të konstruksionit.

Një shembull i përdorimit për ... të:

Var val; var a = ["a", "b", "c"]; për (val e a) (konsol.log (val);)
Në shembullin e mësipërm, cikli for ... e thërret në mënyrë implicite iteratorin e objektit Array për të marrë çdo vlerë në grup.

5. Përdorimi i qartë i një përsëritësi

Iteratorët mund të përdoren gjithashtu në mënyrë eksplicite, megjithatë, në këtë rast kodi bëhet shumë më i ndërlikuar në krahasim me ciklin for ... të ciklit. Duket kështu:

Var a = ["a", "b", "c"]; var it = a.hyrjet (); hyrje var; ndërsa (! (hyrja = ajo.tjetër ()). bërë) (konsol.log (hyrja.vlera);)
Në këtë shembull, metoda Array.prototype.entries kthen një përsëritës që përdoret për të shfaqur vlerat e grupit. Në çdo përsëritje, entry.value përmban një grup të formës [key, value].

II. Përsëritja mbi objekte të ngjashme me grupin

Përveç vargjeve reale, JavaScript gjithashtu përmban objekte të ngjashme me grupe ... E përbashkëta e tyre me vargjet reale është se ato kanë një veçori gjatësi dhe veti me emra në formën e numrave që korrespondojnë me elementët e grupit. Shembujt përfshijnë DOM-in e koleksionit NodeList dhe pseudo-arrejtin e argumenteve të disponueshme brenda çdo funksioni / metode.

1. Përdorimi i metodave të përsëritjes mbi vargje reale

Të paktën shumica, nëse jo të gjitha, metodat e përsëritjes mbi vargje reale mund të përdoren për të përsëritur mbi objekte të ngjashme me grupe.

For dhe për ... në konstruktet mund të aplikohen në objekte të ngjashme me vargje në të njëjtën mënyrë si në vargje reale.

ForEach dhe metodat e tjera Array.prototype zbatohen edhe për objektet e ngjashme me grupin. Për ta bërë këtë, duhet të përdorni një telefonatë në Function.call ose Function.apply.

Për shembull, nëse dëshironi të aplikoni përEach në vetinë childNodes të një objekti Node, mund ta bëni këtë si kjo:

Array.prototype.forEach.call (node.childNodes, funksion (fëmijë) (// bëj diçka me objektin fëmijë));
Për lehtësinë e ripërdorimit të kësaj teknike, mund të deklaroni një referencë për metodën Array.prototype.forEach në një variabël të veçantë dhe ta përdorni atë si një stenografi:

// (Kjo supozon se i gjithë kodi më poshtë është në të njëjtin qëllim) var forEach = Array.prototype.forEach; // ... përÇdo.thirrje (nyja.childNodes, funksion (fëmijë) (// bëj diçka me objektin fëmijë));
Nëse një objekt i ngjashëm me grupin ka një përsëritës, atëherë ai mund të përdoret në mënyrë eksplicite ose të nënkuptuar për të përsëritur mbi objektin në të njëjtën mënyrë si për vargjet reale.

2. Konvertoni në një grup real

Ekziston gjithashtu një mënyrë tjetër, shumë e thjeshtë, për të përsëritur mbi një objekt të ngjashëm me grupin: konvertoni atë në një grup real dhe përdorni ndonjë nga metodat e mësipërme për të përsëritur mbi vargje reale. Për konvertim, mund të përdorni metodën gjenerike Array.prototype.slice, e cila mund të aplikohet në çdo objekt të ngjashëm me grupin. Kjo është bërë shumë thjesht, siç tregohet në shembullin e mëposhtëm:

Var trueArray = Array.prototype.slice.call (arrayLikeObject, 0);
Për shembull, nëse doni të konvertoni një koleksion NodeList në një grup të vërtetë, ju duhet kodi si ky:

Var divs = Array.prototype.slice.call (document.querySelectorAll ("div"), 0);
Përditëso: Siç vërehet në komente

Artikujt kryesorë të lidhur