Višedimenzionalni nizovi u JavaScript -u. Dvodimenzionalni niz u JavaScript Javascript niz višedimenzionalan

U ovom članku ćemo pogledati standardne JavaScript numerički indeksirane nizove. Nizovi se deklarišu pomoću uglatih zagrada:

var fruit = ["Apple", "Orange", "Donkey"]

Da biste izvukli element, stavite njegov indeks u uglate zagrade. Prvi indeks 0:

var fruit = ["Apple", "Orange", "Donkey"] upozorenje (voće) upozorenje (voće) upozorenje (voće)

Takođe možemo dobiti dužinu JavaScript niza:

var fruit = ["Apple", "Orange", "Donkey"] upozorenje (plodovi.dužina)

Ups! Napravili smo niz s dva voća i magarcem. Sada moramo maknuti magarca.

Pop i push metode

Pop metoda u JavaScript -u uklanja element iz niza i vraća ga.

Sljedeći primjer pokazuje kako se Donkey dohvaća iz niza:

var fruit = ["Apple", "Orange", "Donkey"] alert ("Brišem" + fruit.pop ()) // Sada imamo samo upozorenje ["Apple", "Orange"] ("Now veličina niza: "+ fruit.length) // magarac uklonjen

Imajte na umu da pop mijenja sam niz.

Analog pop -a je push metoda, koja dodaje stavku u niz. Na primjer, zaboravili smo dodati breskvu:

var fruit = ["Apple", "Orange"] fruit.push ("Breskva"); // sada imamo upozorenje ["Apple", "Orange", "Peach"] ("Zadnja stavka:" + voće)

  1. Kreirajte niz stilova s ​​elementima “ Jazz”, “Blues”;
  2. Dodajte vrijednost " Roken rol«;
  3. Zamijenite drugu vrijednost s kraja sa " Classic". Trebali biste završiti s nizom: " Jazz”, ”Classic”, ”Roken rol”. Kod bi trebao funkcionirati za bilo koju duljinu niza;
  4. Izdvojite posljednju vrijednost iz niza i upozorite je.

Rešenje

// 1 var styles = ["Jazz", "Bluez"] // 2 styles.push ("Rock" n "Roll") // ili: styles = "Rock" n "Roll" // 3 stila = "Classic "// 4 upozorenja (styles.pop ())

Metode prebacivanja / pomeranja

Metode shift / unshift rade na kraju niza, ali možete koristiti i shift za pomicanje stavki prema gore ( prva vrijednost niza uklanja se pomakom elemenata). Metoda unshift omogućava JavaScript -u da dodaje element u niz sa kraja:

var fruit = ["Apple", "Orange"] var apple = fruit.shift () // sada imamo samo ["Orange"] fruit.unshift ("Lemon") // sada imamo ["Lemon", " Narančasto "] upozorenje (plodovi.dužina) // 2

I shift i unshift mogu raditi na više elemenata istovremeno:

var fruit = ["Apple"] fruit.push ("Narandža", "Breskva") fruit.unshift ("Ananas", "Limun") // sada niz izgleda ovako: ["Ananas", "Lemon", "Jabuka", "Narandža", "Breskva"]

Zadatak za samostalno učenje

Napišite kod za prikaz slučajne vrijednosti iz niza arr putem upozorenja:

var arr = ["Šljiva", "Narandža", "Magarac", "Šargarepa", "JavaScript"]

Napomena: Kod za dobivanje slučajnog broja od minimalne do maksimalne vrijednosti (uključujući) je sljedeći:

var rand = min + Math.floor (Math.random () * (max + 1-min))

Rešenje

Moramo izdvojiti slučajni broj između 0 i arr.length-1 (uključujući):

var arr = ["Šljiva", "Narančasta", "Magarac", "Šargarepa", "JavaScript"] var rand = Math.floor (Math.random () * arr.length) upozorenje (arr)

Iteracija preko niza

U JavaScriptu iteracija preko niza vrši se pomoću for petlje:

var fruit = ["Ananas", "Limun", "Jabuka", "Narandža", "Breskva"] za (var i = 0; i

Zadatak za samostalno učenje

Kreirajte funkciju find (arr, value) koja pronalazi vrijednost u danom nizu i vraća njen indeks, ili -1 ako nije pronađena vrijednost.

Na primjer:

arr = ["test", 2, 1.5, false] find (arr, "test") // 0 nalaz (arr, 2) // 1 nalaz (arr, 1.5) // 2 nalaz (arr, 0) // -1

Rešenje

Moguće rješenje bi moglo izgledati ovako:

funkcija find (niz, vrijednost) (za (var i = 0; i

Ali to nije istina, jer == ne govori razliku između 0 i false.

Ispravnije je koristiti === pri radu sa nizovima u JavaScript -u. Osim toga, najnoviji standard ES5 sadrži funkciju Array # indexOf. Uz njegovu pomoć možemo definirati funkciju na sljedeći način:

funkcija find (niz, vrijednost) (if (array.indexOf) vraća array.indexOf (vrijednost) za (var i = 0; i

Bilo bi još pametnije definirati find putem uvjeta da provjerimo postoji li metoda indexOf.

Zadatak za samostalno učenje

Kreirajte funkciju filterNumeric (arr) koja uzima niz i vraća novi niz koji sadrži samo numeričke vrijednosti iz arr.

Primjer kako bi ovo trebalo funkcionirati:

arr = ["a", 1, "b", 2]; arr = filterNumeric (arr); // sada arr =

Rešenje

Rješenje je petlja preko niza i dodavanje vrijednosti u novi niz ako su numeričke.

pridružite se i podijelite

Ponekad vam je potreban brz način da pretvorite JavaScript niz u niz. Ovome služi metoda pridruživanja.

On povezuje niz u niz pomoću navedenog razdjelnika:

var fruit = ["Limun", "Jabuka", "Narandža", "Breskva"]; var str = fruit.join (","); alert (str);

Obrnuta konverzija se lako vrši metodom split:

var fruit = "Jabuka, narandža, breskva"; var arr = fruit.split (","); // arr sada sadrži upozorenje ["Apple", "Orange", "Peach"] (arr);

Zadatak za samostalno učenje

Objekt uključuje svojstvo className koje sadrži nazive klasa, odvojene razmacima:

Napišite funkciju addClass (obj, cls) koja dodaje klasu cls, ali samo ako ne postoji:

ddClass (obj, "new") // obj.className = "otvori meni new" addClass (obj, "open") // nema promjena (klasa već postoji) addClass (obj, "me") // obj.className = upozorenje "otvori meni novi ja" (obj.className) //

Rešenje

Morate podijeliti className i petlju na dijelove. Ako klasa nije pronađena, dodaje se.

Petlja je blago optimizirana za povećanje performansi:

funkcija addClass (elem, cls) (za (var c = elem.className.split (""), i = c.length-1; i> = 0; i--) (if (c [i] == cls ) return) elem.className + = "" + cls) var obj = (className: "open menu") addClass (obj, "new") addClass (obj, "open") alert (obj.className) // otvoren meni novo

U gornjem primjeru, varijabla c je definirana na početku petlje, a njen posljednji indeks postavljen je na i.

Sama petlja se obrađuje u suprotnom smjeru, završavajući uvjetom i> = 0. Budući da je i> = 0 brže provjeriti od i. Što u JavaScriptu čini pretraživanje u nizu bržim.

Korištenje dužine za obrezivanje niza

Koristeći svojstvo length, možete obrezati niz ovako:

Vi zadajete dužinu, a pretraživač skraćuje niz.

Niz je objekt, što znači

U stvari, u JavaScriptu Array je objekt, kompletan s automatskim postavljanjem dužine i posebnim metodama.

Ovo se razlikuje od koncepta u drugim jezicima, gdje nizovi predstavljaju susjedni segment memorije. Također se razlikuje od povezane liste koja se temelji na redovima ili stekovima.

Numerički ključevi polja

Ključevi su brojevi, ali mogu imati bilo koje ime:

arr = arr = 5 arr.prop = 10 // nemojte to raditi

U JavaScript -u, nizovi su raspršene tablice sa svojim prednostima, ali i nedostacima.

Na primjer, push / pop radi samo na najudaljenijim elementima niza, tako da su nevjerojatno brzi.

push radi samo na kraju:

var arr = ["My", "array"] arr.push ("something") alert (arr) // string "array"

Metode shift / unshift su spore jer moraju prenumerirati cijeli niz. Metoda spajanja također može promijeniti numeriranje:

Dakle, shift / unshift je sporiji od push / pop. Što je niz veći, potrebno je više vremena da JavaScript sortira niz.

Zadatak za samostalno učenje

Šta će biti rezultat? Zašto?

arr = ["a", "b"] arr.push (function () (alert (this))) arr () //?

Rešenje

Budući da su nizovi objekti, arr .. je zapravo poziv metode objekta poput obj metoda:

arr () // isto što i arr () // sintaksički pogrešno, ali konceptualno isto: arr.2 () // prepisano u istom stilu kao i obj.method () this = arr u ovom slučaju se prenosi funkciji, pa se ispisuje sadržaj arr. arr = ["a", "b"] arr.push (function () (alert (this))) arr () // "a", "b", function

Rijetki nizovi, opis dužine

Svojstvo length omogućava vam da ne dobijete veličinu niza u JavaScript -u, već posljednji indeks + 1. Ovo je važno kada su u pitanju rijetki nizovi, s "prazninama" u indeksima.

U sljedećem primjeru ćemo dodati dva elementa praznim plodovima, ali dužina ostaje 100:

var fruit = // prazni niz plodovi = "breskva" plodovi = "jabuka" upozorenje (fruit.length) // 100 (ali postoje samo 2 elementa u nizu)

Ako pokušate ispisati rijetki niz, preglednik će prikazati indekse koji nedostaju kao prazne elemente:

var fruit = // prazan niz plodova = "breskva" voće = "jabuka" upozorenje (voće) //, breskva, jabuka (ili nešto slično)

Ali niz je objekt s dva ključa. Nedostajuće vrijednosti ne zauzimaju prostor.

Rijetki nizovi se ponašaju čudno kada se na njih primijene metode niza. Nemaju pojma da nedostaju indeksi:

var voće = voće = "breskva" voće = upozorenje "jabuka" (fruit.pop ()) // pritisnuti "jabuka" (pri indeksu 9) upozorenje (plodovi.pop ()) // izgurati poništeno stanje (pri indeksu 8 ))

Pokušajte izbjeći rijetke nizove. U svakom slučaju, njihove metode neće dobro funkcionirati. Umjesto toga koristite Object.

Uklanjanje iz niza

Kao što znamo, nizovi su objekti, pa bismo mogli koristiti delete za brisanje vrijednosti:

var arr = ["Idi", "na", "kući"] obriši arr // sada arr = ["Idi", nedefinisano, "kući"] upozorenje (arr) // nije postavljeno

Možete vidjeti da se vrijednost uklanja, ali ne na način na koji bismo željeli, jer niz sadrži element koji nije postavljen.

Operator delete briše par ključ-vrijednost, i to je to. Naravno, budući da je niz samo raspršivanje, položaj uklonjenog elementa postaje nedefiniran.

Češće nego ne, moramo brisati element bez ostavljanja "rupa" između indeksa. Postoji još jedna metoda koja će nam u tome pomoći.

Metoda spajanja

Metoda spajanja može ukloniti i zamijeniti elemente u višedimenzionalnim nizovima JavaScript. Njegova sintaksa je:

arr.splice (index, deleteCount [, elem1, ..., elemN])

Briše element deleteCount koji počinje od indeksa, a zatim ubacuje elem1,…, elemN na njegovo mjesto.

Pogledajmo nekoliko primjera:

var arr = ["Idi", "do", "kući"] arr.splice (1, 1) // ukloni 1 element počevši od indeksa 1 upozorenja (arr.join (",")) // ["Idi" , "home"] (1 stavka uklonjena)

Na ovaj način možete koristiti splice za uklanjanje jednog elementa iz niza. Brojevi elemenata niza pomiču se kako bi se popunila praznina:

var arr = ["Idi", "do", "kući"] arr.splice (0, 1) // ukloni 1 stavku počevši od indeksa 0 upozorenje (arr) // "do" je postala prva stavka

Sljedeći primjer pokazuje kako zamijeniti stavke:

Metoda splice vraća niz uklonjenih stavki:

var arr = ["Idi", "do", "kući", "sada"]; // uklanjanje prve 2 stavke var removed = arr.splice (0, 2) alert (removed) // "Idi", "na"<-- массив удаленных элементов splice может вставлять элементы, задайте 0 для deleteCount. var arr = ["Go", "to", "home"]; // со второй позиции // удаляем 0 // и вставляем "my", "sweet" arr.splice(2, 0, "my", "sweet") alert(arr) // "Go", "to", "my", "sweet", "home"

Ova metoda može koristiti i negativni indeks, koji se računa od kraja niza:

var arr = // za element -1 (pretposljednji) // uklonite 0 elemenata, // i umetnite 3 i 4 arr.splice (-1, 0, 3, 4) alert (arr) // 1,2,3, 4.5

Zadatak za samostalno učenje

Objekt sadrži svojstvo className koje sadrži nazive klasa, odvojene razmacima:

var obj = (naziv klase: "otvoreni meni")

Napišite funkciju removeClass (obj, cls) koja uklanja klasu cls ako je dana:

removeClass (obj, "open") // obj.className = "menu" removeClass (obj, "blabla") // bez promjena (nema klase za uklanjanje)

Rešenje

Morate podijeliti className na dijelove i prelaziti preko ovih dijelova. Ako se pronađe podudaranje, ono se uklanja iz JavaScript niza objekata i zatim dodaje natrag do kraja.

Hajde da ovo malo optimiziramo:

funkcija removeClass (elem, cls) (za (var c = elem.className.split (""), i = c.length-1; i> = 0; i--) (if (c [i] == cls ) c.splice (i, 1)) elem.className = c.join ("")) var obj = (className: "open menu") removeClass (obj, "open") removeClass (obj, "blabla") upozorenje (obj.className) // izbornik

U gornjem primjeru, varijabla c je postavljena na početku petlje, a i je postavljen na posljednji indeks.

Sama petlja ide u suprotnom smjeru, završavajući uvjetom i> = 0. To je zato što se i> = 0 testira brže od i. Što ubrzava potragu za nekretninom u c.

Metoda kriške

Možete izdvojiti dio niza pomoću metode slice (begin [, end]): var arr = ["Zašto", "naučiti", "JavaScript"]; var arr2 = arr.slice (0,2) // uzima 2 elementa počevši od 0 upozorenja (arr2.join (",")) // "Zašto, naučiti"

Imajte na umu da ova metoda ne mijenja broj elemenata u nizu u JavaScript -u, već kopira njegov dio.

Drugi argument možete izostaviti da biste dobili sve elemente počevši od određenog indeksa:

var arr = ["Zašto", "nauči", "JavaScript"]; var arr2 = arr.slice (1) // prihvaća sve elemente koji počinju s 1 upozorenjem (arr2.join (",")) // "naučiti, JavaScript"

Metoda podržava negativne indekse, baš kao i String # kriška.

Obrnuta metoda

Druga korisna metoda je obrnuta. Pretpostavimo da želim dobiti zadnji dio domene, na primjer, “ com"Od" my.site.com”. Evo kako to možete učiniti:

var domain = "my.site.com" var last = domain.split ("."). reverse () upozorenje (last)

Imajte na umu da JavaScript nizovi podržavaju složenu sintaksu (reverse ()) za dozivanje metode, a zatim dohvaćanje elementa iz rezultirajućeg niza.

Možete upućivati ​​duže pozive, poput obrnutog () 0] arr.sort () alert (arr) // 1, 15, 2

Pokrenite gornji kod. Dobit ćete narudžbe 1, 15, 2. To je zato što metoda pretvara sve u niz i koristi zadani leksikografski redoslijed.

U prethodnom članku govorili smo o tome što je to i kako s njim raditi. U ovom ćemo članku već govoriti višedimenzionalni niz.

To je niz koji ima jedan ili više elemenata, koji su ujedno i nizovi. Ovisno o dubini oglasa, posebno se može nazvati dvodimenzionalni niz(2 nivoa) bilo trodimenzionalni niz(3 nivoa) bilo četverodimenzionalni(4 nivoa) itd.

Najpopularniji, nakon jednodimenzionalnog niza, najčešće korišten je dvodimenzionalni niz. Detaljnije ćemo ga proučiti.


Kao što vidite, elementi dvodimenzionalnog niza su jednodimenzionalni nizovi. Da ti jednodimenzionalni nizovi sadrže više polja, tada bi niz arr već bio trodimenzionalan.

Na primjer, kreirajmo tri jednostavna niza i napunimo ih podacima. Prvi ćemo ispuniti parnim brojevima, drugi neparnim brojevima, a treći nekim proizvoljnim podacima.

// Proglašavamo tri prazna polja var evenNumbers = new Array (); // Varijabla k - za indekse niza evenNumbers var k = 0; var oddNumbers = new Array (); // Varijabla n - za indekse niza oddNumbers var n = 0; var data = new Array ("auto", "avion", tačno, 89, "m"); // Ispunite niz evenNumbers, parnim brojevima za (var i = 1; i

Da biste vidjeli što se nalazi unutar niza, možete koristiti alat poput konzola.

Na primjer, želimo vidjeti sadržaj niza sa neparnim brojevima oddNumbers. Da biste to učinili, u donji kod upišite sljedeći redak:

Console.log (oddNumbers);

Da biste vidjeli rezultat, morate otvoriti konzola u pregledaču... U Google Chromeu to se radi na sljedeći način: desnom tipkom miša kliknite stranicu, a zatim u kontekstnom izborniku odaberite zadnju opciju "Prikaži kôd", odnosno inspektora. U engleskoj verziji ova se opcija naziva Inspect.


I ispod će se pojaviti traka s alatima za programere. U njemu morate otići na karticu Konzola.


Sada kako bi stvoriti dvodimenzionalni niz, morate ga deklarirati i dodati mu jednodimenzionalne nizove koje ste prethodno stvorili.

// Proglašavamo dvodimenzionalni niz twoDimens i popunjavamo ga var twoDimens = new Array (parniBrojevi, neparniBrojevi, podaci); console.log (twoDimens);

Pogledajmo sadržaj ovog niza u konzoli.


ponavlja kroz dvodimenzionalni niz

Prvo, naučimo kako pristupiti elementima dvodimenzionalnog niza.

Kao i kod pojedinačnih nizova, elementima se pristupa putem njihovih indeksa.

Na primjer, prikažimo element u indeksu 3 iz niza s neparnim brojevima (oddNumbers). Indeks jednodimenzionalnog niza oddNumbers u dvodimenzionalnom nizu twoDimens je jedan (1).

Document.write ("Element sa indeksom 3 iz niza neparnih brojeva oddNumbers je:" + dvaDimens); // Element: 7

U nizu twoDimens, pozivamo se na element u indeksu 1. Element u tom indeksu je niz oddNumbers. I u ovom nizu već pristupamo elementu s indeksom 3, koji je broj 7.

Prijeđimo sada na samo pitanje kako ponoviti dvodimenzionalni niz.

Petlja preko dvodimenzionalnog niza vrši se pomoću dvostruke petlje. Na primjer, idemo ponoviti naš niz twoDimens.

Za (var i = 0; i< twoDimens.length; i++){ for(var j = 0; j < twoDimens[i].length; j++){ document.write("

Element sa indeksom " + i +" " + j +" jednaka je: " + dvaDimenzija [i] [j] +"

"); } }

U prvoj petlji ponavljamo sam niz dva para Dimens. U drugoj petlji već ponavljamo sam element (niz). Prvo, varijabla i je jednaka 0. Stoga, u drugoj petlji, prvo ponavljamo prvi niz evenNumbers, koji ima indeks 0. I već unutar druge petlje pristupamo elementima ovog niza. Dakle: dvije dimenzije [j]. Gdje se j kreće od 0 do dužine niza evenNumbers.

Nakon ponavljanja elemenata iz prvog niza, vraćamo se na prvu petlju, povećavamo varijablu i i nastavljamo ponavljati preko drugog niza oddNumbers, koji ima indeks 1. I tako ponavljamo svaki element dvodimenzionalnog niza twoDimens.

Pogledajmo sada rezultat ovog pretraživanja:


To je sve o čemu sam htio govoriti u ovom članku. Sada znate kako stvoriti dvodimenzionalni niz, kako pristupiti elementima dvodimenzionalnog niza i kako ponavljati dvodimenzionalni niz. Nadam se da je sve bilo jasno. Želim vam veliki uspjeh!

Arrays

Array je uređena zbirka vrijednosti. Vrijednosti u nizu nazivaju se elementi, a svaki element karakterizira numerička pozicija u nizu, koja se naziva indeks. Nizovi u JavaScript -u su netipizirani: elementi niza mogu biti bilo koje vrste, a različiti elementi istog niza mogu biti različitih tipova. Elementi niza mogu biti čak i objekti ili drugi nizovi, što vam omogućava da kreirate složene strukture podataka kao što su nizovi objekata i nizovi nizova.

Indeksi niza u JavaScript-u temelje se na nuli i koriste 32-bitne cijele brojeve-prvi element niza ima indeks 0. JavaScript nizovi su dinamični: mogu se povećavati i smanjivati ​​po potrebi; nema potrebe deklarirati fiksne veličine niza kada se stvaraju ili ponovno dodjeljivati ​​memoriju kada im se promijeni veličina.

Nizovi u JavaScript -u specijalizirani su oblik objekata, a indeksi niza ne znače ništa više od naziva svojstava, koji su slučajno cijeli brojevi.

Kreiranje nizova

Najjednostavniji način za stvaranje niza je s literalom, koja je jednostavna lista elemenata niza odvojenih zarezima u uglatim zagradama. Vrijednosti u literalnom nizu ne moraju biti konstante - to mogu biti bilo koji izrazi, uključujući literale objekta:

Var empty =; // Prazan niz var numbers =; // Niz sa pet numeričkih elemenata var misc = [1.1, true, "a",]; // 3 različita elementa + zarezna zarez var base = 1024; var table =; // Niz sa varijablama var arrObj = [,]; // 2 polja unutar koji sadrže objekte

Doslovna sintaksa niza vam omogućava da umetnete opcionalnu zarez na kraju, tj. literal [,] odgovara nizu sa dva elementa, a ne sa tri.

Drugi način stvaranja niza je pozivanje konstruktora Polje ()... Konstruktor se može pozvati na tri različita načina:

    Pozovite konstruktor bez argumenata:

    Var arr = new Array ();

    U ovom slučaju će se stvoriti prazan niz ekvivalentan literalu.

    Pozovite konstruktor s jednim numeričkim argumentom koji specificira dužinu niza:

    Var arr = novi niz (10);

    U tom slučaju će se stvoriti prazan niz navedene dužine. Ovaj oblik pozivanja konstruktora Array () može se koristiti za pred alokaciju memorije za niz ako je broj njegovih elemenata unaprijed poznat. Imajte na umu da ovo ne sprema nikakve vrijednosti u niz.

    Izričito navedite vrijednosti prva dva ili više elemenata niza ili jednog ne numeričkog elementa u pozivu konstruktora:

    Var arr = novi niz (5, 4, 3, 2, 1, "test");

    U ovom slučaju argumenti konstruktora postaju vrijednosti elemenata novog niza. Korištenje literala niza je gotovo uvijek lakše nego korištenje konstruktora Array () na ovaj način.

Čitanje i pisanje elemenata polja

Elementima niza pristupa se pomoću operatora. S lijeve strane zagrada mora postojati referenca niza. Proizvoljan izraz koji vraća vrijednost koja nije negativna mora biti unutar zagrada. Ova sintaksa je pogodna i za čitanje i za pisanje vrijednosti elementa niza. Stoga su sve sljedeće JavaScript izjave važeće:

// Kreiramo niz sa jednim elementom var arr = ["world"]; // Očitavanje stavke 0 var value = arr; // Zapišite vrijednost u element 1 arr = 3.14; // Zapišite vrijednost u element 2 i = 2; arr [i] = 3; // Upiši vrijednost u element 3 arr = "hello"; // Pročitajte stavke 0 i 2, upišite vrijednost u stavku 3 arr] = arr;

Dopustite mi da vas podsjetim da su nizovi specijalizirana vrsta objekata. Uglate zagrade koje se koriste za pristup elementima niza djeluju potpuno isto kao uglate zagrade koje se koriste za pristup svojstvima objekta. JavaScript tumač pretvara numeričke indekse u zagradama u nizove - indeks 1 postaje niz "1" - i zatim koristi nizove kao imena svojstava.

Nema ništa posebno u pretvaranju numeričkih indeksa u nizove: isto se može učiniti s običnim objektima:

Var obj = (); // Kreiranje jednostavnog objekta obj = "one"; // Indeksirajte ga cijelim brojevima

Posebnost niza je u tome što pri korištenju naziva svojstava koji su negativni cijeli brojevi, nizovi automatski određuju vrijednost svojstva dužine... Na primjer, niz arr je kreiran iznad s jednim elementom. Zatim su njegovim elementima dodijeljene vrijednosti s indeksima 1, 2 i 3. Kao rezultat ovih operacija, vrijednost svojstva dužine niza se promijenila i postala jednaka 4.

Trebali biste jasno razlikovati indekse u nizu i nazive svojstava objekata. Svi indeksi su imena svojstava, ali samo svojstva s cijelim nazivima su indeksi. Svi nizovi su objekti i možete im dodati svojstva s bilo kojim imenom. Međutim, ako dodirujete svojstva koja su indeksi niza, nizovi reagiraju ažuriranjem vrijednosti svojstva length prema potrebi.

Imajte na umu da su negativni i necjelobrojni dopušteni kao indeksi niza. U ovom slučaju, brojevi se pretvaraju u nizove, koji se koriste kao nazivi svojstava.

Dodavanje i uklanjanje elemenata niza

Već smo vidjeli da je najjednostavniji način dodavanja elemenata nizu dodjeljivanje vrijednosti novim indeksima. Ovu metodu možete koristiti i za dodavanje jednog ili više elemenata na kraj niza guranje ():

Var arr =; // Kreiramo prazan niz arr.push ("nula"); // dodamo vrijednost na kraj arr.push ("jedan", 2); // Dodamo još dvije vrijednosti

Također možete dodati element na kraj niza dodjeljivanjem vrijednosti elementu arr. Za umetanje elementa na početak niza možete koristiti metodu unshift () a postojeći elementi u nizu pomaknuti su na više indekse.

Možete izbrisati elemente niza pomoću operatora brisanja, poput običnih svojstava objekata:

Var arr =; delete arr; 2 u dolini; // netačno, indeks 2 u nizu je nedefiniran arr.length; // 3: operator delete ne mijenja svojstvo length niza

Uklanjanje elementa slično je (ali malo drugačije) dodjeljivanju nedefinirane vrijednosti tom elementu. Primijetite da primjena operatora brisanja na element u nizu ne mijenja vrijednost svojstva length, niti se pomiče prema dolje prema indeksiranim elementima kako bi ispunila prazninu preostalu nakon brisanja elementa.

Osim toga, moguće je ukloniti elemente na kraju niza jednostavnim dodjeljivanjem nove vrijednosti svojstvu length. Nizovi imaju metodu pop ()(suprotno od push ()), što smanjuje dužinu niza za 1 i vraća vrijednost uklonjenog elementa. Postoji i metoda shift ()(suprotno od unshift ()), koji uklanja element na početku niza. Za razliku od operatora brisanja, metoda shift () pomiče sve elemente za jednu poziciju ispod njihovih trenutnih indeksa.

Konačno, postoji višenamjenska metoda spojnica (), koji vam omogućuje umetanje, brisanje i zamjenu elemenata niza. Ona mijenja vrijednost svojstva length i po potrebi pomiče elemente niza s nižim ili većim indeksima. O svim tim metodama raspravljat ćemo kasnije.

Višedimenzionalni nizovi

JavaScript ne podržava "prave" višedimenzionalne nizove, ali dobro oponaša ih koristeći nizove iz niza. Da biste pristupili stavci podataka u nizu nizova, dovoljno je dvaput koristiti operator.

Na primjer, pretpostavimo da je promenljiva matrica niz nizova brojeva. Svaki element matrice [x] je niz brojeva. Možete koristiti matricu izraza [x] [y] za pristup određenom broju u nizu. Ispod je specifičan primjer gdje se dvodimenzionalni niz koristi kao tablica množenja:

// Kreiranje višedimenzionalnog niza var table = new Array (10); // U tablici je 10 redova za (var i = 0; i

Metode klase niza

Standard ECMAScript 3 definira mnoge prikladne funkcije za rad s nizovima kao dijelom Array.prototype, koje su dostupne kao metode bilo kojeg niza. Ove metode će biti predstavljene u sljedećim odjeljcima.

Join () metoda

Metoda Array.join () pretvara sve elemente u nizu u nizove, povezuje ih i vraća rezultirajući niz. Opcionalni argument se može proslijediti metodi s nizom koji će se koristiti za odvajanje stavki u rezultatskom nizu. Ako nije naveden razdjelni niz, koristi se zarez. Na primjer, sljedeći isječak rezultira u nizu "1,2,3":

Var arr =; arr.join (); // "1,2,3" arr.join ("-"); // "1-2-3"

Metoda reverse ()

Metoda Array.reverse () obrće redoslijed elemenata u nizu i vraća preuređeni niz. Permutacija se vrši direktno na izvornom nizu, tj. ova metoda ne stvara novi niz s preuređenim elementima, već ih mijenja u već postojeći niz. Na primjer, sljedeći isječak, koji koristi metode reverse () i join (), rezultira nizom "3,2,1":

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

Sort () metoda

Metoda Array.sort () sortira elemente u izvornom nizu i vraća sortirani niz. Ako se metoda sort () pozove bez argumenata, sortiranje se vrši po abecedi (radi poređenja, stavke se privremeno pretvaraju u nizove ako je potrebno). Nedefinirani elementi su omotani do kraja niza.

Funkciju usporedbe možete proslijediti kao argument sort () za sortiranje u bilo kojem drugom abecednom redoslijedu. Ova funkcija postavlja koji od dva argumenta bi trebao biti prvi na sortiranoj listi. Ako prvi argument mora prethoditi drugom, funkcija usporedbe mora vratiti negativan broj. Ako prvi argument slijedi drugi u sortiranom nizu, tada funkcija mora vratiti broj veći od nule. A ako su dvije vrijednosti ekvivalentne (tj. Njihov redoslijed nije važan), funkcija usporedbe trebala bi vratiti 0:

Var arr =; arr.sort (); // Abecednim redom: 1111, 222, 33, 4 arr.sort (function (a, b) (// Numerički redoslijed: 4, 33, 222, 1111 return ab; // Vraća vrijednost 0 // ovisno o sortiranju red a i b)); // Sortiraj unatrag, od najvišeg do najnižeg arr.sort (function (a, b) (return b-a));

Primijetite koliko je zgodno koristiti neimenovanu funkciju u ovom isječku. Uporedna funkcija se koristi samo ovdje, pa nema potrebe davati joj ime.

Metoda concat ()

Metoda Array.concat () stvara i vraća novi niz koji sadrži elemente izvornog niza na kojem je pozvana metoda concat () i vrijednosti svih argumenata proslijeđenih metodi concat (). Ako je bilo koji od ovih argumenata sam niz, njegovi elementi se dodaju vraćenom nizu. Treba napomenuti, međutim, da ne postoji rekurzivna konverzija niza iz niza u jednodimenzionalni niz. Metoda concat () ne mijenja originalni niz. Ispod je nekoliko primjera:

Var arr =; arr.concat (4, 5); // Vraća arr.concat (); // Vraća arr.concat (,) // Vraća arr.concat (4,]) // Vraća]

Slice () metoda

Metoda Array.slice () vraća presjek ili podmazu navedenog niza. Dva argumenta metode definiraju početak i kraj vraćenog dijela. Vraćeni niz sadrži element numeriran u prvom argumentu plus sve sljedeće elemente do (ali ne uključujući) element numeriran u drugom argumentu.

Ako je naveden samo jedan argument, vraćeni niz sadrži sve elemente od početne pozicije do kraja niza. Ako je bilo koji od argumenata negativan, on navodi broj elementa u odnosu na kraj niza. Dakle, argument -1 odgovara posljednjem elementu niza, a argument -3 odgovara trećem elementu niza s kraja. Evo nekoliko primjera:

Var arr =; arr.slice (0,3); // Vraća arr.slice (3); // Vraća arr.slice (1, -1); // Vraća arr.slice (-3, -2); // Će se vratiti

Splice () metoda

Metoda Array.splice () je generička metoda koja ubacuje ili uklanja elemente iz niza. Za razliku od metoda slice () i concat (), metoda splice () mijenja originalni niz na kojem je pozvana. Imajte na umu da metode splice () i slice () imaju vrlo slična imena, ali izvode potpuno različite operacije.

Metoda splice () može ukloniti elemente iz niza, umetnuti nove elemente ili učiniti oboje istovremeno. Elementi niza se po potrebi pomiču tako da se nakon umetanja ili brisanja formira susjedna sekvenca.

Prvi argument metode splice () određuje poziciju u nizu iz koje se ubacuje i / ili briše. Drugi argument određuje broj elemenata koje treba ukloniti (izrezati) iz niza. Ako je drugi argument izostavljen, uklanjaju se svi elementi niza od navedenog niza do kraja niza. Metoda splice () vraća niz uklonjenih elemenata ili (ako nijedan od elemenata nije uklonjen) prazan niz.

Prva dva argumenta metode splice () određuju elemente niza koje treba ukloniti. Ovi argumenti mogu biti praćeni bilo kojim brojem dodatnih argumenata koji specificiraju elemente koje treba umetnuti u niz, počevši od pozicije navedene u prvom argumentu.

Var arr =; arr.splice (4); // Vraća arr = arr.splice (1,2); // Vraća arr = arr.splice (1,1); // Će se vratiti; arr = arr =; arr.splice (2,0, "a", "b"); // Će se vratiti; arr =

Metode push () i pop ()

Metode push () i pop () omogućuju vam rad sa nizovima poput stekova. Metoda push () dodaje jedan ili više novih elemenata na kraj niza i vraća novu dužinu. Metoda pop () izvodi suprotnu operaciju - uklanja zadnji element niza, smanjuje dužinu niza i vraća vrijednost koju je uklonio. Imajte na umu da obje ove metode mijenjaju izvorni niz umjesto da stvaraju njegovu izmijenjenu kopiju.

Metode unshift () i shift ()

Metode unshift () i shift () ponašaju se otprilike na isti način kao push () i pop (), osim što ubacuju i uklanjaju elemente na početku niza, a ne na kraju. Metoda unshift () pomiče postojeće elemente prema većim indeksima kako bi se napravilo mjesta, dodaje element ili elemente na početak niza i vraća novu dužinu niza. Metoda shift () uklanja i vraća prvi element niza, pomjerajući sve sljedeće elemente prema dolje za jednu poziciju kako bi zauzela prostor koji je oslobodjen na početku niza.

Posljednje ažuriranje: 09.04.2018

Nizovi su namijenjeni za rad sa skupovima podataka. Izraz new Array () koristi se za kreiranje niza:

Var myArray = novi Array ();

Postoji i kraći način za inicijalizaciju niza:

Var myArray =;

U ovom slučaju stvaramo prazan niz. Ali možete mu dodati i početne podatke:

Var ljudi = ["Tom", "Alice", "Sam"]; console.log (ljudi);

U ovom slučaju, u myArrayu će postojati tri elementa. Grafički se može predstaviti na sljedeći način:

Indeksi se koriste za upućivanje na pojedinačne elemente niza. Odbrojavanje počinje od nule, odnosno prvi element će imati indeks 0, a posljednji će imati indeks 2:

Var ljudi = ["Tom", "Alice", "Sam"]; console.log (ljudi); // Tom var person3 = ljudi; // Sam console.log (person3); // Sam

Ako pokušamo pristupiti elementu s indeksom većim od veličine niza, dobivamo nedefinirano:

Var ljudi = ["Tom", "Alice", "Sam"]; console.log (ljudi); // undefined

Također, indeksom se postavljaju vrijednosti elemenata niza:

Var ljudi = ["Tom", "Alice", "Sam"]; console.log (ljudi); // Tom people = "Bob"; console.log (ljudi); // Bob

Štaviše, za razliku od drugih jezika kao što su C # ili Java, možete instalirati element koji nije inicijalno instaliran:

Var ljudi = ["Tom", "Alice", "Sam"]; console.log (ljudi); // undefined - u nizu postoje samo tri elementa people = "Bob"; console.log (ljudi); // Bob

Također je vrijedno napomenuti da, za razliku od brojnih programskih jezika u JavaScriptu, nizovi nisu jako otkucani, jedan niz može pohraniti podatke različitih vrsta:

Var objekti = ["Tom", 12, tačno, 3,14, lažno]; console.log (objekti);

operator širenja

Operator širenja ... omogućava vam da uzimate vrijednosti iz niza odvojeno:

Neka su brojevi =; console.log (... brojevi); // 1 2 3 4 console.log (brojevi); //

Operator širenja je naveden prije niza. Kao rezultat toga, izraz ... brojevi će vratiti skup brojeva, ali to neće biti niz, već pojedinačne vrijednosti.

Višedimenzionalni nizovi

Nizovi mogu biti jednodimenzionalni i višedimenzionalni. Svaki element u višedimenzionalnom nizu može biti zaseban niz. Gore smo razmatrali jednodimenzionalni niz, a sada napravimo višedimenzionalni niz:

Var brojevi1 =; // jednodimenzionalni niz var numbers2 = [,]; // dvodimenzionalni niz

Vizuelno, oba niza mogu biti predstavljena na sljedeći način:

Jednodimenzionalni brojevi niza1

Za dobivanje jednog elementa niza koristi se i indeks:

Var tomInfo = ljudi;

Tek sada će varijabla tomInfo predstavljati niz. Da bismo dobili element unutar ugniježđenog niza, moramo koristiti njegovu drugu dimenziju:

Console.log ("Ime:" + ljudi); // Tom console.log ("Starost:" + ljudi); // 25

To jest, ako možemo vizualno predstaviti dvodimenzionalni niz u obliku tablice, tada će se element people odnositi na ćeliju tablice koja se nalazi na sjecištu prvog reda i drugog stupca (prva dimenzija je 0 - red, druga dimenzija - 1 - stupac).

Takođe možemo uraditi zadatak:

Var ljudi = [["Tom", 25, lažno], ["Bill", 38, tačno], ["Alice", 21, lažno]]; ljudi = 56; // dodjeljuje posebnu vrijednost console.log (ljudi); // 56 ljudi = ["Bob", 29, lažno]; // dodjeljuje niz console.log (ljudi); // Bob

Prilikom stvaranja višedimenzionalnih nizova nismo ograničeni samo na dvodimenzionalne, već možemo koristiti i velike dimenzionalne nizove:

Var brojevi =; brojevi =; // sada su brojevi dvodimenzionalni niz brojevi =; // sada su brojevi trodimenzionalni niz brojevi = 5; // prvi element 3D niza je 5 console.log (brojevi);

Pozdrav svima zainteresiranima za JavaScript višedimenzionalne nizove i sortiranje. U ovoj publikaciji pokušat ću detaljno obraditi ovu temu.

Stoga ćete nakon čitanja ovog članka naučiti zašto se višedimenzionalni nizovi koriste u web aplikacijama, kako se stvaraju te kako se njima može manipulirati i sortirati. Prijeđimo na učenje!

Kako se stvaraju višedimenzionalni nizovi i čemu služe?

Za početak, vrijedi se sjetiti kako se stvara običan jednodimenzionalni niz.

var array =

Sada zapamtite da je višedimenzionalni niz niz nizova. Slažem se, zvuči kao tautologija. Ipak, pročitajte definiciju još jednom. Zaista, višedimenzionalni niz se sastoji od određenog broja ugniježđenih.

Razmotrite sljedeću situaciju. Na početku igre korisnik unosi svoje ime, a nakon kraja na ekranu se prikazuje tablica s ocjenama s imenima igrača i njihovim zapisima.

Jasno je da su takve informacije pohranjene u bazi podataka. Ali kad ga izvučemo iz baze podataka, dobivamo višedimenzionalni niz. Uostalom, svaki pod niz sadrži podatke o igračevoj prijavi i broju osvojenih bodova.

Sve će to izgledati ovako:

var results = [["Markus", 333], ["Natasha", 211], ["Alexey", 124]];

Kao što vidite, informacije se mogu pohraniti heterogene. To mogu biti nizovi, brojevi, pa čak i. To je moguće jer nizovi u nisu tipizirani.

U ovom slučaju pristup elementima se odvija putem dvostrukog operatora.

Da biste konsolidirali materijal, analizirajte mali program.

Rezultati =

Nizovi su prilično prikladan način za pohranu složenih složenih podataka tijekom njihove obrade. Osim toga, vrlo je prikladno raditi s njima, a istovremeno je i brzina njihove obrade prilično velika.

Metode sortiranja podataka

Za nizove u JavaScriptu postoji ugrađena metoda tzv sortiraj ()... Ovaj alat je vrlo fleksibilan. A sada ću objasniti zašto.

Ako koristite metodu bez parametara, ona automatski raspoređuje nizove po prvom elementu po abecednom redu. Dakle, prilikom poziva rezultate.sortiraj () raščlanjeni objekt će izgledati ovako:

Aleksej, 124

Markus, 333

Nataša, 211

A ako zamijenite elemente u svakom ugniježđenom nizu, dobit ćete:

124, Aleksej

211, Natasha

333, Markus

U ovom slučaju, radi usporedbe, svi elementi se privremeno pretvaraju u nizove.

Ako vam je za rješavanje određenog zadatka potrebna funkcija koja razvrstava elemente na nestandardan način, možete je sami napisati i proslijediti kao parametar sortiraj ()... Treba imati na umu da prilagođena funkcija mora vratiti:

  • pozitivan broj (općenito odaberite 1) ako prva navedena stavka slijedi drugu u usporedbi;
  • negativan broj (obično -1) ako druga odabrana stavka treba slijediti prvu;
  • nula ako su dvije provjerene vrijednosti jednake.

Kao primjer, uzmimo početni niz rezultate sortiraj po bodovima. Osim toga, rezultati će biti poredani od najvišeg do najnižeg. To se može učiniti na dva načina.

U prvoj verziji sam promijenio logiku sortiranja, tj. u situaciji u kojoj je potrebno vratiti pozitivan broj, vraćam negativan i obrnuto.

Tablica zapisa:

No, u drugoj metodi logiku razvrstavanja sam ostavio netaknutom, ali sam dodatno upotrijebila drugu metodu - obrnuto ()... Kao što ime govori, obrnuto mijenja redoslijed elemenata.

Stoga će funkcija sort () izgledati ovako:

1 2 3 4 5 funkcija RecordSort (a, b) (if (a> b) vraća 1; inače if (a< b) return -1; else return 0; }

funkcija RecordSort (a, b) (if (a> b) vraća 1; inače if (a< b) return -1; else return 0; }

Nakon toga, dodajmo gornju metodu.

Zaključak se donosi na sličan način.

Želim vam skrenuti pažnju na jednu važnu stvar. Prilikom korištenja ovih funkcija sve promjene se događaju u nizu na koji ih primjenjujete. Stoga, ako trebate sačuvati izvorni oblik podataka, stvorite kopiju, a zatim je uredite.

Pa, govorio sam o višedimenzionalnim nizovima i njihovom sortiranju. Ako vam se članak svidio, pretplatite se na blog i pročitajte druge jednako zanimljive publikacije. Bio bih zahvalan na repostovima. Do sljedećeg puta!

Ćao ćao!

Srdačan pozdrav, Roman Chueshov