Vargjet në shembuj të javascript. Array dy-dimensionale në JavaScript. Numrat e vargjeve një-dimensionale1

Në artikullin e mëparshëm, kemi biseduar për atë që është dhe si të punojmë me të. Në këtë artikull do të flasim varg shumëdimensional.

Shtë një grup që ka një ose më shumë elementë, të cilët janë gjithashtu vargje. Në varësi të thellësisë së reklamës, në veçanti, ajo mund të quhet grup dydimensional(2 nivele) ose varg tre-dimensional(3 nivele) ose katër-dimensionale(4 nivele) dhe kështu me radhë.

Më e popullarizuara, pas koleksionit një-dimensional, më e përdorura zakonisht është masa dy-dimensionale. Ne do ta studiojmë atë në më shumë detaje.


Siç mund ta shihni, elementet e një koleksioni dy-dimensional janë vargje një-dimensionale. Nëse këto vargje një-dimensionale përmbajnë më shumë vargje, atëherë vargu arr do të ishte tashmë tre-dimensional.

Si shembull, le të krijojmë tre grupe të thjeshta dhe t'i mbushim ato me të dhëna. Të parin do ta mbushim me numra çift, të dytin me numra tek dhe të tretin me disa të dhëna arbitrare.

// Shpallen tre vargje bosh var evenNumbers \u003d Array i ri (); // Ndryshorja k - për indekset e vargut evenNumbers var k \u003d 0; var oddNumbers \u003d Varg i ri (); // Ndryshorja n - për indekset e vargjeve oddNummer var n \u003d 0; të dhëna var \u003d Renditja e re ("makinë", "aeroplan", e vërtetë, 89, "m"); // Plotësoni numrat çift, me numra çift për (var i \u003d 1; i

Në mënyrë që të shihni se çfarë ka brenda koleksionit, mund të përdorni një mjet të tillë si konsol.

Për shembull, ne duam të shohim përmbajtjen e një grupi me numra tek numrat tek. Për ta bërë këtë, shkruani rreshtin vijues në kodin më poshtë:

Console.log (numrat tek);

Për të parë rezultatin, duhet të hapni tastierë në shfletues... Në Google Chrome, kjo bëhet kështu: kliko me të djathtën në faqe dhe nga menyja e kontekstit, zgjidh opsionin e fundit "View Code", domethënë inspektorin. Në versionin anglisht, ky opsion quhet Inspect.


Dhe më poshtë do të shfaqet shiriti i mjeteve për zhvilluesit. Në të, duhet të shkoni në skedën Console.


Tani në mënyrë që të krijoni një koleksion dy dimensional, ju duhet ta deklaroni atë dhe shtoni vargjet një-dimensionale që keni krijuar më lart në të.

// Shpalleni një koleksion dy-dimensional twoDimens, dhe plotësojeni atë var twoDimens \u003d Array i ri (ÇiftNumrat, numrat tek, të dhënat); console.log (twoDimens);

Le të shohim përmbajtjen e këtij grupi në tastierë.


duke përsëritur mbi një grup dy-dimensional

Së pari, le të mësojmë si të qasemi në elementet e një grupi dy-dimensional.

Ashtu si me vargjet e vetme, elementet arrihen nga indekset e tyre.

Për shembull, le të shfaqim elementin në indeksin 3 nga një grup me numra tek (numra tek). Indeksi i numrave të vargut njëdimensional në numrat e koleksionit dy-dimensional twoDimens është një (1).

Document.write ("Elementi me indeksin 3 nga vargu oddNumbers është:" + twoDimens); // Elementi: 7

Në vargun twoDimens, ne i referohemi elementit në indeksin 1. Elementi në këtë indeks është vargu numra tek. Dhe në këtë grup, ne tashmë jemi duke hyrë në elementin me indeksin 3, i cili është numri 7.

Tani le të zbresim në pyetjen vetë si të rrokulliset mbi një grup dy dimensional.

Lak mbi një grup dy-dimensionale është bërë duke përdorur një lak të dyfishtë. Për shembull, le të përsërisim mbi grupin tonë twoDimens.

Për (var i \u003d 0; i< twoDimens.length; i++){ for(var j = 0; j < twoDimens[i].length; j++){ document.write("

Elementi me indeks "+ i +" "+ j +" është e barabartë me: "+ twoDimens [i] [j] +"

"); } }

Në lakun e parë, ne përsërisim mbi vetë grupin twoDimens. Në lakun e dytë, ne tashmë po përsërisim mbi vetë elementin (vargun). Së pari, ndryshorja i është e barabartë me 0. Prandaj, në lakun e dytë, ne së pari përsërisim mbi vargun e parë edheNumrat, i cili ka indeksin 0. Dhe tashmë brenda lakut të dytë, ne kemi qasje në elementet e këtij grupi. Kështu: twoDimens [j]. Ku j varion nga 0 deri në gjatësinë e vargut evenNumbers.

Pasi të përsërisim mbi elementet nga vargu i parë, kthehemi në lakun e parë, rritim ndryshoren i dhe vazhdojmë të përsërisim në vargun e dytë të numrave odd, i cili ka indeksin 1. Dhe kështu ne përsërisim mbi secilin element të masës dy-dimensionale dypërmasave.

Tani le të shohim rezultatin e këtij kërkimi:


Kjo është e gjitha për të cilën doja të flisja në këtë artikull. Tani ju e dini se si të krijoni një koleksion dy-dimensional, si të përdorni elementet e një grupi dy-dimensional dhe si të përsërisni mbi një koleksion dy-dimensional. Shpresoj që gjithçka të ishte e qartë. Ju uroj suksese të mëdha!

  • I. Shikimi i vargjeve reale
    1. Për secilën dhe metodat përkatëse
    2. Për lak
    3. Përdorimi i saktë i lakut për ...
    4. Për ... të lakut (përdorimi i nënkuptuar i një iteratori)
    5. Përdorimi i qartë i një përsëritësi
    1. Përdorimi i metodave për të përsëritur vargjet reale
    2. Konvertimi në një grup të vërtetë
    3. Një shënim mbi objektet e ekzekutimit

I. Shikimi i vargjeve reale

Për momentin, ekzistojnë tre mënyra për të përsëritur elementët e një grupi të vërtetë:
  1. varg.prototip.për secilën metodë;
  2. klasik për lak;
  3. Një lak i formuar mirë për ...
Përveç kësaj, së shpejti, me shfaqjen e standardit të ri ECMAScript 6 (ES 6), priten edhe dy mënyra:
  1. për ... të lakut (përdorimi i nënkuptuar i një iteratori);
  2. përdorimi i qartë i një përsëritësi.

1. për secilën metodë 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.

Shembulli i përdorimit:
var a \u003d ["a", "b", "c"]; a.për secilin (funksioni (hyrja) (console.log (hyrja);));
Në përgjithësi, përdorimi i forEach kërkon lidhjen e bibliotekës emuluese es5-shim për shfletuesit që nuk kanë mbështetje vendase për këtë metodë. Këto përfshijnë IE 8 dhe më të hershme, të cilat janë ende në përdorim sot.

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

Nëse shqetësoheni për koston e mundshme të thirrjes së një thirrje telefonike për secilin 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 e të gjithë ose disa prej elementeve, plus kryerjen e disa veprimeve me to:

  • every - kthen true nëse për secilin element të vargut thirrja kthen një vlerë që është hedhur në true.
  • disa - kthehet e vërtetë nëse për të paktën një element të koleksionit thirrja kthen një vlerë që është hedhur në e vërtetë.
  • filtër - krijon një grup të ri që përmban ato elemente të grupit origjinal për të cilin kthimi i kthimit kthehet i vërtetë.
  • harta - krijon një grup të ri që përmban vlerat e kthyera nga thirrja.
  • zvogëlo - zvogëlon një grup në një vlerë të vetme, duke aplikuar një kthim thirrje me radhë për secilin element të grupit, duke filluar me të parin (mund të jetë i dobishëm për llogaritjen e shumës së elementeve të grupit dhe funksioneve të tjera përfundimtare).
  • removeRight - Punon ngjashëm për të zvogëluar, por përsërit mbi elementët në rend të kundërt.

2. Lak për

Mirë për rregullat:

Var a \u003d ["a", "b", "c"]; indeksi var; për (indeksi \u003d 0; indeksi< a.length; ++index) { console.log(a); }
Nëse gjatësia e vargut nuk ndryshon gjatë gjithë lakut, dhe vetë laku i përket një pjese të një kodi kritik për performancën (e cila nuk ka gjasa), atëherë mund të përdorni versionin "më optimal" të për të ruajtur gjatësinë e vargut:

Var a \u003d ["a", "b", "c"]; indeksi var, len; për (indeksi \u003d 0, len \u003d a.gjatësia; indeksi< 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 përsa i përket optimizimit dhe të hiqni qafe variablin për ruajtjen e gjatësisë së vargut duke ndryshuar rendin e përsëritjes në të kundërtën:

Var a \u003d ["a", "b", "c"]; indeksi var; për (indeksi \u003d a.gjatësia - 1; indeksi\u003e \u003d 0; --index) (console.log (a);)
Sidoqoftë, në motorët modernë JavaScript, këto lojëra të optimizuara zakonisht nuk do të thonë asgjë.

3. Përdorimi i saktë i lakut for ...

Nëse ju këshillohet të përdorni një lak për ... në mend, mos harroni se përsëritja mbi vargje nuk është ajo për të cilën është menduar. Përkundër keqkuptimit të zakonshëm, laku për ... nuk përsëritet mbi indekset e vargut, por vetitë e numëruara të objektit.

Sidoqoftë, në disa raste, siç është përsëritja e vargjeve të rralla, sepse ... në mund të jetë i dobishëm, me kusht që të merrni disa masa paraprake, siç tregohet në shembullin më poshtë:

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

  1. që vargu ka vetinë e vet të quajtur çelës (jo i trashëguar nga prototipi i tij).
  2. ajo ç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 të vargut në ES5, nga i cili rrjedh se indeksi më i madh që mund të ketë një element në një grup është (2 ^ 32 - 2) \u003d 4294967294.
Sigurisht, kontrolle të tilla do të marrin kohë shtesë gjatë ekzekutimit të lakut. Por në rastin e një grupi të rrallë, kjo metodë është më efikase sesa një lak for, pasi që në këtë rast përsëriten vetëm ato elemente që përcaktohen qartë në grup. 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ë lakun for.

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

Varg funksioniHasOwnIndex (varg, çelës) (kthimi i grupit. KaOwnProperty (çelësi) && /^0$|^\\d*$/.test(key) & çelësi<= 4294967294; }
Pastaj trupi i lakut nga shembulli do të zvogëlohet ndjeshëm:

Për (çelësi në a) (nëse (arrayHasOwnIndex (a, çelësi)) (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, ju mund të përdorni një version më të shkurtër, edhe pse zyrtarisht jo mjaft i saktë, por megjithatë i përshtatshëm për shumicën e rasteve:

Për (çelësi në a) (nëse (a.hasOwnProperty (çelësi) && Vargu (parseInt (çelësi, 10)) \u003d\u003d\u003d çelësi) (console.log (a);))

4. Laku për ... (përdorimi i nënkuptuar i një iteratori)

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

Iterator ë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ë pafund).
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 iteratori 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ë i papërcaktuar (mungon) nëse prona e bërë është e vërtetë.
Shumë objekte të ndërtuara, përfshirë. vargjet reale kanë përsëritës të parazgjedhur. Mënyra më e thjeshtë për të përdorur një iterator në vargje reale është përdorimi i ri për ... i konstruktit.

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

Var val; var a \u003d ["a", "b", "c"]; për (val e një) (console.log (val);)
Në shembullin e mësipërm, laku for ... në mënyrë implicite thërret përsëritësin e objektit Array për të marrë secilën vlerë në grup.

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

Iteratorët gjithashtu mund të përdoren në mënyrë të qartë, megjithatë, në këtë rast kodi bëhet shumë më kompleks, krahasuar me lakun për ... Duket kështu:

Var a \u003d ["a", "b", "c"]; var it \u003d a.ndryshimet (); hyrja var; ndërsa (! (hyrja \u003d ajo.tjetra ()). bërë) (console.log (hyrja.vlera);)
Në këtë shembull, metoda Array.prototype.entries kthen një iterator që përdoret për të shfaqur vlerat e vargut. Në çdo përsëritje, entry.value përmban një grup si [çelësi, vlera].

II Përsëritje mbi objektet e ngjashme me grupin

Përveç vargjeve reale, JavaScript gjithashtu përmban objekte të ngjashme me vargun ... Ajo që kanë të përbashkët me vargjet reale është se ato kanë një veti të gjatësisë dhe vetitë me emra në formën e numrave që korrespondojnë me elementet e grupit. Shembujt përfshijnë DOM të koleksionit NodeList dhe pseudo-grupin e argumenteve të disponueshëm brenda çdo funksioni / metode.

1. Përdorimi i metodave të përsëritjes së vargjeve reale

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

Për dhe për ... në konstruksione mund të zbatohet në objekte të ngjashme me array në të njëjtën mënyrë siç janë në vargje reale.

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

Për shembull, nëse dëshironi të aplikoni për secilën në pronën childNodes të një objekti Nyje, mund ta bëni kështu:

Array.prototype.forEach.call (nyja.childNodes, funksioni (fëmija) (// bëj diçka me objektin fëmijë));
Për lehtësinë e ripërdorimit të kësaj teknike, ju mund të deklaroni një referencë në Array.prototype.forE secilën metodë në një ndryshore të veçantë dhe ta përdorni atë si një shkrim i shkurtër:

// (Kjo supozon se i gjithë kodi më poshtë është në të njëjtën fushë) var forEach \u003d Array.prototype.forEach; // ... forEach.call (nyja.childNodes, funksioni (fëmija) (// bëj diçka me objektin fëmijë));
Nëse një objekt i ngjashëm me një varg ka një iterator, atëherë ai mund të përdoret në mënyrë të qartë ose të nënkuptuar për të përsëritur mbi objekt në të njëjtën mënyrë si për vargjet reale.

2. Shndërroni në një grup të vërtetë

Ekziston edhe një mënyrë tjetër, shumë e thjeshtë, për të përsëritur mbi një objekt të ngjashëm me një grup: shndërroni atë në një grup të vërtetë dhe përdorni ndonjë nga metodat e mësipërme për të përsëritur mbi vargje reale. Për shndërrim, mund të përdorni metodën e përgjithshme Array.prototype.slice, e cila mund të zbatohet për çdo objekt të ngjashëm me një varg. Kjo është bërë shumë thjesht, siç tregohet në shembullin më poshtë:

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

Var divs \u003d Array.prototype.slice.call (document.querySelectorAll ("div"), 0);
Azhurnoni: Siç është cekur në komentet nga rock dhe torbasow, në ES6 mund të përdorni metodën më përshkruese Array.from në vend të Array.prototype.slice.

3. Një shënim mbi objektet e ekzekutimit

Nëse aplikoni metoda Array.prototype në objektet e ekzekutimit (siç janë koleksionet DOM), atëherë duhet të keni parasysh se këto metoda nuk janë të garantuara që të funksionojnë si duhet në të gjitha mjediset e kohës së ekzekutimit (përfshirë shfletuesit). Kjo varet nga sjellja e një objekti të veçantë në një kohë të caktuar, më saktësisht, nga mënyra se si zbatohet operacioni abstrakt HasProperty në këtë objekt. Problemi është se vetë standardi ES5 lejon mundësinë e sjelljes jo korrekte të një objekti në lidhje me këtë operacion (shih §8.6.2).

Prandaj, është e rëndësishme të provoni funksionimin e metodave Array.prototype në çdo kohë ekzekutimi (shfletuesi) në të cilin planifikoni të përdorni aplikacionin tuaj.

Përshëndetje për të gjithë të interesuarit në vargje shumëdimensionale dhe klasifikim JavaScript. Në botimin aktual, do të përpiqem ta trajtoj këtë temë në të gjitha detajet.

Prandaj, pasi të lexoni këtë artikull, do të mësoni pse përdoren vargje shumëdimensionale në aplikacionet në internet, si krijohen ato dhe si mund të manipulohen dhe renditen. Le të merremi me mësimin!

Si krijohen vargjet shumëdimensionale dhe për çfarë shërbejnë ato?

Për të filluar, vlen të kujtohet se si krijohet një koleksion i rregullt një dimensional.

varg var \u003d

Tani, mos harroni se një koleksion shumëdimensional është një grup i vargjeve.Pajtohem, tingëllon si një tautologji. Sidoqoftë, lexoni përsëri përkufizimin. Në të vërtetë, një grup shumëdimensional përbëhet nga një numër i caktuar i foleve.

Merrni parasysh situatën vijuese. Në fillim të një loje, përdoruesi fut emrin e tij dhe pas përfundimit, në ekran shfaqet një tabelë vlerësimi me emrat e lojtarëve dhe të dhënat e tyre.

Shtë e qartë se informacioni i tillë ruhet në një bazë të dhënash. Por kur e tërheqim nga baza e të dhënave, marrim një grup shumëdimensional. Mbi të gjitha, secila nënvarg përmban hyrjen e lojtarit dhe numrin e pikëve të shënuara.

E gjitha do të duket kështu:

rezultate var \u003d [["Markus", 333], ["Natasha", 211], ["Alexey", 124]];

Siç mund ta shihni, informacioni mund të ruhet heterogjen. Mund të jenë vargje, numra dhe madje. Kjo është e mundur sepse vargjet në nuk janë të daktilografuara.

Në këtë rast, hyrja në elemente ndodh përmes një operatori të dyfishtë.

Për të konsoliduar materialin, analizoni një program të vogël.

Rezultatet \u003d

Vargjet janë një mënyrë mjaft e përshtatshme për të ruajtur të dhëna komplekse të renditura gjatë përpunimit të tyre. Përveç kësaj, është shumë e përshtatshme për të punuar me ta dhe në të njëjtën kohë shpejtësia e përpunimit të tyre është mjaft e lartë.

Metodat e klasifikimit të të dhënave

Për vargjet në JavaScript, ekziston një metodë e integruar e quajtur lloj ()... Ky mjet është shumë fleksibël. Dhe tani do të shpjegoj pse.

Nëse përdorni një metodë pa parametra, atëherë ajo automatikisht rendit nënvargjet nga elementi i parë në rend alfabetik. Pra, kur telefononi rezultatet.lloj () objekti i analizuar do të duket kështu:

Aleksi, 124 vjeç

Markus, 333

Natasha, 211 vjeç

Dhe nëse ndërroni elementet në secilën grup të vendosur, do të merrni:

124, Aleksi

211, Natasha

333, Markus

Në këtë rast, për krahasim, të gjithë elementët përkohësisht shndërrohen në vargje.

Nëse, për të zgjidhur një detyrë specifike, keni nevojë për një funksion që rendit elementet në një mënyrë jo standarde, atëherë mund ta shkruani vetë dhe ta kaloni si një parametër te lloj ()... Duhet të kihet parasysh se një funksion i përcaktuar nga përdoruesi duhet të kthehet:

  • një numër pozitiv (zakonisht zgjedhja e 1) nëse artikulli i parë i specifikuar ndjek të dytin në krahasim;
  • një numër negativ (zakonisht -1) nëse artikulli i dytë i zgjedhur duhet të ndjekë të parin;
  • zero nëse dy vlerat e testuara janë të barabarta.

Le të marrim grupin fillestar si shembull rezultatet rendit sipas pikëve. Për më tepër, rezultatet do të renditen nga më e larta tek më e ulta. Kjo mund të bëhet në dy mënyra.

Në opsionin e parë, unë ndryshova logjikën e klasifikimit, d.m.th. në një situatë ku duhet të ktheni një numër pozitiv, unë të kthej një negativ dhe anasjelltas.

Tabela e regjistrimit:

Por në metodën e dytë, unë e lashë logjikën e klasifikimit të paprekur, por përveç kësaj përdori një metodë tjetër - anasjelltas ()... Siç sugjeron emri, e anasjellta ndryshon rendin e elementeve.

Prandaj, funksioni sort () do të duket kështu:

1 2 3 4 5 funksioni RecordSort (a, b) (nëse (a\u003e b) kthimi 1; përndryshe nëse (a< b) return -1; else return 0; }

funksioni RecordSort (a, b) (nëse (a\u003e b) kthimi 1; përndryshe nëse (a< b) return -1; else return 0; }

Por pas saj, shtoni metodën e mësipërme.

Përfundimi është bërë në një mënyrë të ngjashme.

Unë dua të tërheq vëmendjen tuaj në një pikë të rëndësishme. Kur përdorni këto funksione, të gjitha ndryshimet ndodhin në grupin në të cilin i aplikoni. Kështu, nëse keni nevojë të mbani pamjen origjinale të të dhënave, atëherë krijoni një kopje, dhe më pas redaktoni ato.

Epo, kështu që unë fola për vargjet shumëdimensionale dhe klasifikimin e tyre. Nëse e pëlqeni artikullin, atëherë regjistrohuni në blog dhe lexoni botime të tjera po aq interesante. Unë do të isha mirënjohës për ripostimet. Deri herën tjetër!

Mirupafshim!

Përshëndetje, Roman Chueshov

Vargjet

Array është një koleksion i renditur i vlerave. Vlerat në një grup quhen elemente, dhe secili element karakterizohet nga një pozicion numerik në grup, i quajtur indeks. Vargjet në JavaScript nuk janë të shtypura: elementët e një grupi mund të jenë të çdo lloji, dhe elementë të ndryshëm të të njëjtit grup mund të jenë të llojeve të ndryshme. Elementet e vargut mund të jenë edhe objekte ose vargje të tjera, gjë që ju lejon të krijoni struktura komplekse të të dhënave si vargje të objekteve dhe vargje të vargjeve.

Indekset e vargjeve në JavaScript janë me bazë zero dhe përdorin numra të plotë 32-bit - elementi i parë i një grupi ka indeksin 0. Vargjet JavaScript janë dinamike: ato mund të rriten dhe tkurren sipas nevojës; nuk ka nevojë për të deklaruar madhësi fikse të vargjeve kur ato krijohen ose për të alokuar përsëri kujtesën kur ato ndryshohen.

Vargjet në JavaScript janë një formë e specializuar e objekteve, dhe indekset e grupeve nënkuptojnë pak më shumë sesa thjesht emrat e pronave, të cilat rastësisht janë numra të plotë.

Krijimi i vargjeve

Mënyra më e lehtë për të krijuar një grup është me një fjalë për fjalë, e cila është një listë e thjeshtë e elementeve të vargut të ndarë me presje në kllapa katrore. Vlerat në një varg të fjalëpërfjalshëm nuk duhet të jenë konstante - ato mund të jenë çdo shprehje, duke përfshirë fjalë për fjalë:

Var bosh \u003d; // Numrat var të vargut bosh \u003d; // Array me pesë elemente numerike var misc \u003d [1.1, true, "a",]; // 3 elementë të llojeve të ndryshëm + baza e varjes së presjes \u003d 1024; tabela var \u003d; // Varg me ndryshore var arrObj \u003d [,]; // 2 vargje brenda që përmbajnë objekte

Sintaksa e drejtpërdrejtë e vargut ju lejon të futni një presje opsionale zvarritëse, d.m.th. [[] përputhet me një grup me dy elemente, jo me tre.

Një mënyrë tjetër për të krijuar një koleksion është thirrja e konstruktorit Array ()... Konstruktori mund të thirret në tre mënyra të ndryshme:

    Thirrni konstruktorin pa argumente:

    Var arr \u003d Array i ri ();

    Në këtë rast, do të krijohet një koleksion bosh i barazvlefshëm me fjalorin.

    Thirrni konstruktorin me një argument të vetëm numerik duke specifikuar gjatësinë e vargut:

    Var arr \u003d Array i ri (10);

    Në këtë rast, do të krijohet një grup i zbrazët i gjatësisë së specifikuar. Kjo formë e thirrjes së konstruktorit Array () mund të përdoret për të alokuar paraprakisht memorjen për një grup nëse numri i elementeve të tij dihet paraprakisht. Vini re se kjo nuk ruan ndonjë vlerë në grup.

    Në mënyrë specifike specifikoni vlerat e dy ose më shumë elementëve të parë të grupit ose të një elementi jo-numerik në një thirrje konstruktori:

    Var arr \u003d Varg i ri (5, 4, 3, 2, 1, "provë");

    Në këtë rast, argumentet për konstruktorin bëhen vlerat e elementeve të grupit të ri. Përdorimi i teksteve drejtpërdrejtë është pothuajse gjithmonë më i lehtë sesa përdorimi i konstruktorit Array () në këtë mënyrë.

Leximi dhe shkrimi i elementeve të grupit

Elementet e vargut arrihen duke përdorur operatorin. Duhet të ketë një referencë në grup në të majtë të kllapave. Një shprehje arbitrare që kthen një vlerë të plotë jo-negative duhet të jetë brenda kllapave. Kjo sintaksë është e përshtatshme për leximin dhe shkrimin e vlerës së një elementi të grupit. Prandaj, të gjitha deklaratat e mëposhtme JavaScript janë të vlefshme:

// Krijoni një grup me një element var arr \u003d ["bota"]; // Lexoni artikullin 0 var vlera \u003d arr; // Shkruani vlerën në elementin 1 arr \u003d 3.14; // Shkruaj një vlerë në elementin 2 i \u003d 2; arr [i] \u003d 3; // Shkruaj një vlerë në elementin 3 arr \u003d "përshëndetje"; // Lexoni pikat 0 dhe 2, shkruani vlerën në pikën 3 arr] \u003d arr;

Më lejoni t'ju kujtoj se vargjet janë një lloj i specializuar i objektit. Kllapat katrore të përdorura për të hyrë në elementet e vargut veprojnë saktësisht njësoj si kllapat katrore të përdorura për të hyrë në vetitë e objektit. Përkthyesi JavaScript shndërron indekset numerike të kllapa në vargje - indeksi 1 bëhet vargu "1" - dhe më pas përdor vargjet si emra të pronave.

Nuk ka asgjë të veçantë në konvertimin e indekseve numerike në vargje: e njëjta gjë mund të bëhet me objektet e rregullta:

Var obj \u003d (); // Krijoni një objekt të thjeshtë obj \u003d "një"; // Indeksoni atë me numra të plotë

Veçori e vargjeve është se kur përdorni emra të pronave që janë integrikë jo-negativë, vargjet përcaktojnë automatikisht vlerën e pronës gjatësia... Për shembull, vargu arr është krijuar sipër me një element të vetëm. Pastaj, elementeve të tij iu caktuan vlera me indekset 1, 2 dhe 3. Si rezultat i këtyre operacioneve, vlera e pronës gjatësi të vargut ndryshoi dhe u bë e barabartë me 4.

Ju duhet të bëni qartë dallimin midis indekseve në një grup dhe emrave të pronave të objekteve. Të gjithë indekset janë emra të pronave, por vetëm vetitë me emra të plotë janë indekse. Të gjitha vargjet janë objekte, dhe ju mund t'u shtoni veti atyre me çdo emër. Sidoqoftë, nëse po ndikoni në vetitë që janë indekse të vargjeve, vargjet reagojnë duke azhurnuar vlerën e pronës së gjatësisë sipas nevojës.

Vini re se negativët dhe jo-integruesit lejohen si indekse të grupeve. Në këtë rast, numrat shndërrohen në vargje që përdoren si emra të pronave.

Shtimi dhe Heqja e Elementeve të Rreshtit

Ne kemi parë tashmë që mënyra më e lehtë për të shtuar elemente në një grup është caktimi i vlerave në indekse të reja. Ju gjithashtu mund të përdorni metodën për të shtuar një ose më shumë elementë në fund të një grupi shtyj ():

Var arr \u003d; // Krijoni një varg bosh arr.push ("zero"); // Shtoni një vlerë në fund arr.push ("një", 2); // Shtoni edhe dy vlera

Ju gjithashtu mund të shtoni një element në fund të një grupi duke i caktuar një vlerë elementit arr. Për të futur një element në fillim të një grupi, mund të përdorni metodën zhvendos ()dhe elementët ekzistues në grup janë zhvendosur në indekse më të larta.

Mund të fshini elementë të një grupi duke përdorur operatorin e fshirjes, si vetitë e zakonshme të objekteve:

Var arr \u003d; fshi arr; 2 në arr; // false, indeksi 2 në grup është i papërcaktuar gjatësia e arr; // 3: operatori i fshirjes nuk ndryshon vetinë e gjatësisë së vargut

Heqja e një elementi është e ngjashme (por paksa e ndryshme) me caktimin e një vlere të papërcaktuar në atë element. Vini re se aplikimi i operatorit të fshirjes në një element në një grup nuk e ndryshon vlerën e pronës së gjatësisë, dhe as nuk lëviz poshtë elementeve me indekse më të larta për të mbushur boshllëkun e lënë pasi elementi të fshihet.

Alsoshtë gjithashtu e mundur që të hiqen elementet në fund të një grupi thjesht duke caktuar një vlerë të re në pronën gjatësi. Vargjet kanë një metodë pop () (përballë shtytjes ()), e cila zvogëlon gjatësinë e grupit me 1 dhe kthen vlerën e elementit të hequr. Ekziston edhe një metodë ndërrim () (e kundërt me zhvendosjen ()), e cila heq elementin në fillim të grupit. Ndryshe nga operatori i fshirjes, metoda shift () zhvendos të gjithë elementët poshtë një pozicioni poshtë indekseve të tyre aktuale.

Më në fund ekziston një metodë për shumë qëllime bashkim ()që ju lejon të futni, fshini dhe zëvendësoni elementet e vargut. Ndryshon vlerën e pronës së gjatësisë dhe zhvendos elementet e grupit me indekse më të ulëta ose më të larta sipas nevojës. Ne do t'i diskutojmë të gjitha këto metoda pak më vonë.

Vargje shumëdimensionale

JavaScript nuk mbështet vargje shumëdimensionale "reale", por bën një punë të mirë të simulimit të tyre duke përdorur vargje nga vargje. Për të hyrë në një artikull të dhënash në një varg vargjesh, mjafton të përdorësh dy herë operatorin.

Për shembull, supozoni se matrica e ndryshueshme është një grup i vargjeve të numrave. Secili element i matricës [x] është një grup numrash. Ju mund të përdorni matricën e shprehjes [x] [y] për të hyrë në një numër specifik në një grup. Më poshtë është një shembull specifik ku një koleksion dy-dimensional përdoret si një tabelë e shumëzimit:

// Krijoni një tabelë vargje shumëdimensionale \u003d Array i ri (10); // Ka 10 rreshta në tabelë për (var i \u003d 0; i

Metodat e klasës së masave

Standardi ECMAScript 3 përcakton shumë funksione të përshtatshme për të punuar me vargje si pjesë e Array.prototype, të cilat janë të disponueshme si metoda të çdo grupi. Këto metoda do të paraqiten në nënseksionet vijuese.

Bashkohu me metodën

Metoda Array.join () shndërron të gjithë elementët në grup në vargje, i bashkon ato dhe kthen vargun që rezulton. Një argument opsional mund t'i kalohet metodës me një varg që do të përdoret për të ndarë artikujt në vargun e rezultatit. Nëse nuk përcaktohet ndonjë varg ndarës, përdoret presja. Për shembull, copa e mëposhtme rezulton në vargun "1,2,3":

Var arr \u003d; arr.bashkohuni (); // "1,2,3" arr.bashkohuni ("-"); // "1-2-3"

Metoda e kundërt ()

Metoda Array.reverse () kthen rendin e elementeve në një grup dhe kthen një koleksion të renditur. Ndërrimi bëhet direkt në grupin origjinal, d.m.th. kjo metodë nuk krijon një grup të ri me elementë të renditur, por i rendit ato në një grup tashmë ekzistues. Për shembull, copa e mëposhtme, e cila përdor metodat e kundërt () dhe join (), rezulton në vargun "3,2,1":

Var arr \u003d; arr.reverse (). join (); // "3,2,1"

Rendit metodën ()

Metoda Array.sort () rendit elementet në grupin origjinal dhe kthen grupin e renditur. Nëse metoda sort () thirret pa argumente, renditja kryhet alfabetikisht (për krahasim, artikujt përkohësisht shndërrohen në vargje nëse është e nevojshme). Elementet e papërcaktuara janë mbështjellë deri në fund të koleksionit.

Ju mund të kaloni një funksion krahasimi si një argument për të renditur () për të renditur në ndonjë rend tjetër jo-alfabetik. Ky funksion përcakton se cili nga dy argumentet e tij duhet të vijë i pari në listën e renditur. Nëse argumenti i parë duhet t'i paraprijë argumentit të dytë, funksioni i krahasimit duhet të kthej një numër negativ. Nëse argumenti i parë do të ndjekë të dytin në renditjen e renditur, atëherë funksioni duhet të kthej një numër më të madh se zero. Dhe nëse të dy vlerat janë ekuivalente (d.m.th., renditja nuk është e rëndësishme), funksioni i krahasimit duhet të kthejë 0:

Var arr \u003d; arr.sortoj (); // Renditja alfabetike: 1111, 222, 33, 4 arr.sort (funksioni (a, b) (// Rendi numerik: 4, 33, 222, 1111 kthimi ab; // Kthen vlerën 0 // në varësi të renditjes së renditjes) a dhe b)); // Rendit prapa, nga arr.i lartë në më të ultin. Renditja (funksioni (a, b) (kthimi b-a));

Vini re se sa i përshtatshëm është të përdorni një funksion pa emër në këtë fragment. Funksioni i krahasimit përdoret vetëm këtu, prandaj nuk ka nevojë t’i jepni një emër.

Metoda konkat ()

Metoda Array.concat () krijon dhe kthen një grup të ri që përmban elementet e vargut origjinal në të cilin u thirr metoda konkat () dhe vlerat e çdo argumenti të kaluar në metodën konkat (). Nëse ndonjë nga këto argumente është vetë një grup, elementet e tij shtohen në grupin e kthyer. Duhet të theksohet, megjithatë, se nuk ka asnjë shndërrim rekursiv të një vargu nga vargjet në një grup një-përmasor. Metoda concat () nuk modifikon grupin origjinal. Më poshtë janë disa shembuj:

Var arr \u003d; arr.concat (4, 5); // Kthen arr.concat (); // Kthehet arr.concat (,) // Kthehet arr.concat (4,]) // Kthehet]

Metoda fetë ()

Metoda Array.slice () kthen një fetë, ose nën-varg, të grupit të specifikuar. Dy argumentet e metodës përcaktojnë fillimin dhe mbarimin e pjesës së kthyer. Vargu i kthyer përmban artikullin e numëruar në argumentin e parë, plus të gjithë artikujt pasues deri në (por duke mos përfshirë) artikullin e numëruar në argumentin e dytë.

Nëse specifikohet vetëm një argument, vargu i kthyer përmban të gjitha elementet nga pozicioni fillestar deri në fund të grupit. Nëse ndonjë nga argumentet është negativ, ai specifikon numrin e elementit në lidhje me fundin e vargut. Për shembull, argumenti -1 korrespondon me elementin e fundit të grupit, dhe argumenti -3 korrespondon me elementin e tretë të grupit nga fundi. Ketu jane disa shembuj:

Var arr \u003d; arr. fetë (0.3); // Kthen arr.slice (3); // Kthen arr.slice (1, -1); // Kthen arr.slice (-3, -2); // Do të kthehet

Metoda e bashkimit ()

Metoda Array.splice () është një metodë e përgjithshme që fut ose heq elemente nga një grup. Ndryshe nga metodat slice () dhe concat (), metoda splice () modifikon grupin origjinal në të cilin u thirr. Vini re se metodat e bashkimit () dhe prerjes () kanë emra shumë të ngjashëm, por kryejnë operacione krejtësisht të ndryshme.

Metoda e bashkimit () mund të heqë elemente nga një grup, të futë elementë të rinj ose t'i bëjë të dyja në të njëjtën kohë. Elementet e vargut zhvendosen sipas nevojës në mënyrë që pas futjes ose fshirjes, të formohet një sekuencë e afërt.

Argumenti i parë në metodën e bashkimit () specifikon pozicionin në grupin nga i cili duhet futur dhe / ose fshirë. Argumenti i dytë specifikon numrin e elementeve që duhen hequr (prerë) nga grupi. Nëse argumenti i dytë hiqet, të gjithë elementët e grupit nga grupi i specifikuar deri në fund të grupit hiqen. Metoda e bashkimit () kthen një koleksion të elementeve të hequr, ose (nëse asnjë nga elementët nuk është hequr) një grup bosh.

Dy argumentet e para të metodës splice () specifikojnë elementet e grupit që do të hiqen. Këto argumente mund të ndiqen nga çdo numër i argumenteve shtesë që specifikojnë elementet që do të futen në grup, duke filluar nga pozicioni i specifikuar në argumentin e parë.

Var arr \u003d; arr.flokë (4); // Kthen arr \u003d arr.splice (1,2); // Kthen arr \u003d arr.splice (1,1); // Do të kthehet; arr \u003d arr \u003d; arr.shpikë (2,0, "a", "b"); // Do të kthehet; arr \u003d

Metodat push () dhe pop ()

Metodat push () dhe pop () ju lejojnë të punoni me vargje si pirgje. Metoda push () shton një ose më shumë elementë të rinj në fund të grupit dhe kthen gjatësinë e saj të re. Metoda pop () kryen operacionin e kundërt - ajo heq elementin e fundit të vargut, zvogëlon gjatësinë e grupit dhe kthen vlerën e hequr. Vini re se të dyja këto metoda modifikojnë koleksionin origjinal në vend se të krijojnë një kopje të modifikuar të saj.

Metodat e zhvendosjes () dhe zhvendosjes ()

Metodat unshift () dhe shift () sillen në të njëjtën mënyrë si push () dhe pop (), përveç që futin dhe heqin elemente në fillim të grupit, jo në fund. Metoda unshift () zhvendos elementet ekzistuese drejt indekseve më të mëdha për të lënë vend, shton elementin ose elementet në fillim të grupit dhe kthen gjatësinë e re të grupit. Metoda shift () heq dhe kthen elementin e parë të vargut, duke zhvendosur të gjithë elementët pasues poshtë një pozicioni për të zënë hapësirën e zbrazur në fillim të vargut.

Përditësimi i fundit: 09.04.2018

Vargjet janë të destinuara për të punuar me grupe të dhënash. Shprehja Array i ri () përdoret për të krijuar një koleksion:

Var myArray \u003d Array i ri ();

Ekziston edhe një mënyrë më e shkurtër për të iniciuar një koleksion:

Var myArray \u003d;

Në këtë rast, ne po krijojmë një grup të zbrazët. Por gjithashtu mund të shtoni të dhëna fillestare në të:

Var njerëz \u003d ["Tom", "Alice", "Sam"]; tastierë.log (njerëz);

Në këtë rast, myArray do të ketë tre elementë. Grafikisht, mund të përfaqësohet si më poshtë:

Indekset përdoren për t'iu referuar elementeve individuale të një grupi. Numërimi fillon nga zero, domethënë elementi i parë do të ketë indeksin 0, dhe i fundit do të ketë 2:

Var njerëz \u003d ["Tom", "Alisa", "Sam"]; tastierë.log (njerëz); // Tom var person3 \u003d njerëz; // Sam console.log (person3); // Sam

Nëse përpiqemi të aksesojmë një element në një indeks më të madh se madhësia e grupit, ne bëhemi të papërcaktuar:

Var njerëz \u003d ["Tom", "Alice", "Sam"]; tastierë.log (njerëz); // e papërcaktuar

Gjithashtu, sipas indeksit, vendosen vlerat për elementet e grupit:

Var njerëz \u003d ["Tom", "Alisa", "Sam"]; tastierë.log (njerëz); // Tom njerëz \u003d "Bob"; tastierë.log (njerëz); // Bob

Për më tepër, ndryshe nga gjuhët e tjera si C # ose Java, mund të instaloni një element që nuk ishte instaluar fillimisht:

Var njerëz \u003d ["Tom", "Alisa", "Sam"]; tastierë.log (njerëz); // e papërcaktuar - ka vetëm tre elementë në grupin e njerëzve \u003d "Bob"; tastierë.log (njerëz); // Bob

Vlen gjithashtu të përmendet se, ndryshe nga një numër gjuhësh programimi në JavaScript, vargjet nuk janë të shtypura fort, një grup mund të ruajë të dhëna të llojeve të ndryshme:

Objekte var \u003d \u003d "" Tom ", 12, e vërtetë, 3.14, e gabuar]; tastierë.log (objekte);

operatori i përhapjes

operatori i përhapjes ... ju lejon të merrni vlera nga një grup veç e veç:

Le numrat \u003d; tastierë.log (... numrat); // 1 2 3 4 console.log (numrat); //

operatori i përhapjes specifikohet para grupit. Si rezultat, shprehja ... numrat do të kthejë një grup numrash, por nuk do të jetë një grup, por vlera individuale.

Vargje shumëdimensionale

Vargjet mund të jenë një-dimensionale dhe shumë-dimensionale. Secili element në një grup shumëdimensional mund të jetë një grup i veçantë. Mbi të kemi konsideruar një grup me një dimension, tani le të krijojmë një koleksion shumë-dimensional:

Numrat var1 \u003d; // vargu varg një-dimensional2 numrat2 \u003d [,]; // koleksion dy-dimensional

Vizualisht, të dy vargjet mund të përfaqësohen si më poshtë:

Numrat e vargjeve një-dimensionale1

Për të marrë një element të vetëm të një grupi, përdoret gjithashtu një indeks:

Var tomInfo \u003d njerëz;

Vetëm tani variabla tomInfo do të përfaqësojë një grup. Për të marrë një element brenda një grupi të vendosur, ne duhet të përdorim dimensionin e tij të dytë:

Console.log ("Emri:" + njerëz); // Tom console.log ("Mosha:" + njerëz); // 25

Kjo do të thotë, nëse mund të paraqesim vizualisht një koleksion dy-dimensional në formën e një tabele, atëherë elementi njerëz do t'i referohet qelizës së tabelës, e cila ndodhet në kryqëzimin e rreshtit të parë dhe kolonës së dytë (dimensioni i parë - 0 - rreshti, dimensioni i dytë - 1 - kolona).

Ne gjithashtu mund të bëjmë detyrën:

Var njerëz \u003d [["Tom", 25, false], ["Bill", 38, true), ["Alice", 21, false]]; njerëzit \u003d 56; // caktoni një tastierë të veçantë vlerash.log (njerëz); // 56 persona \u003d ["Bob", 29, false); // caktoni një tastierë array.log (njerëzit); // Bob

Kur krijojmë vargje shumëdimensionale, ne nuk kufizohemi vetëm në ato dy-dimensionale, por mund të përdorim edhe vargje me përmasa të mëdha:

Numrat var \u003d; numrat \u003d; // tani numrat është një numër i dy-dimensionale array \u003d; // tani numrat është një numër i tre-dimensionale array \u003d 5; // elementi i parë i koleksionit 3D është 5 console.log (numrat);