WEBnSTUDY.com
JavaScript

Dodavanje i uklanjanje elemenata JavaScript niza

Osnovna stvar koju moramo umeti da uradimo sa nizom je da u njega dodamo nove elemente, kao i da neke postojeće uklonimo. JavaScript nizovi su veoma fleksibilni. Već smo rekli da članovi niza mogu biti različitih tipova. Takođe, znamo da niz ne moramo da unapred deklarišemo sa nekim predodređenim brojem elemenata kao u drugim programskim jezicima.

Danas ćemo videti da u niz slobodno možemo dodavati elemente, bez razmišljanja o maksimalnom broju elemenata, alokaciji memorije i sličnim stvarima. Takođe, videćemo da neke elemente niza slobodno možemo ostaviti nedefinisanim. Objekat Array se brine o svemu tome umesto nas.

Evo kratkog pregleda metoda koje ćemo danas savladati:

a.push(E) Dodaje jedan ili više novih elemenata na kraj niza.
a.pop() Uklanja poslednji elemenat niza i vraća ga rezultat.
a.unshift(E) Dodaje jedan ili više novih elemenata na početak niza.
a.shift() Uklanja prvi elemenat niza i vraća ga kao rezultat.
a.splice(I,N,E1,E2,...) Uklanja N elemenata počev od indeksa I i umesto njih ubacuje elemente E1, E2...

Inače, svi ovde opisani metodi spadaju u tzv. metode mutatore, što znači da menjaju originalni objekat za koji se pozivaju.

Dodavanje elemenata u niz

Element (član niza) u JavaScriptu možemo uvek jednostavno dodati navođenjem novog indeksa.

a[ind] = vrednost

Indeksi čak ne moraju ni da budu poređani - mogu postojati i preskočeni indeksi. Elementi čiji indeksi su preskočeni imaju vrednost undefined. Ovo je relativno jednostavan način, ali ako bismo želeli da nam indeksi budu po redosledu, moramo u nekoj promenljivoj stalno držati broj elemenata niza, ili koristiti sledeći izraz, koji uvek dodaje novi element na kraju niza:

a[a.length] = vrednost

Ovo su sve sasvim legitimni načini dodavanja elementa. Objekat Array nam obezbeđuje posebne i naprednije metode za dodavanje elemenata u niz. Metod push() služi za dodavanje jednog ili više elemenata na kraj niza.

dužina = a.push(e) dužina = a.push(e1, e2, e3, ...) [a1, a2, a3, ..., an, e1, e2, e3, ...]

Dodavanje elementa na kraj niza je relativno jednostavno. Međutim, dodavanje elementa na njegov početak nije tako trivijalan zadatak. Ako bismo morali da programiramo, morali bismo da obezbedimo pomeranje svih ostalih elemenata. Srećom, postoji i metod unshift() koji radi upravo to - dodaje jedan ili više elemenata na početak niza. Time će indeksi postojećih elemenata biti promenjeni.

dužina = a.unshift(e) dužina = a.unshift(e1, e2, e3, ...) [e1, e2, e3, ..., a1, a2, a3, ..., an]

Oba ova metoda kao rezultat vraćaju novu dužinu niza.

Ako na početku ili na kraju niza imamo preskočene (undefined) elemente, metodi push() i unshift() ih neće popuniti, već će prosto dodati nove elemente. Posle ovih metoda će nam uvek ostati isti broj nedefinisanih elemenata niza.

Primer za dodavanje elemenata


	var a = [];  // novi niz sa 0 elemenata

  a[3] = "Pera";
  a[8] = "Mika";
  // niz ima 9 elemenata: [-, -, -, "Pera", -, -, -, -, "Mika"]
  
  a.unshift("Žika");
  // niz ima 10 elemenata: ["Žika", -, -, -, "Pera", -, -, -, -, "Mika"]
  
  a.push("Joca", "Peđa");
  // niz ima 12 elemenata: ["Žika", -, -, -, "Pera", -, -, -, -, "Mika", "Joca", "Peđa"]

Za elemente koji imaju vrednost undefined, navodili smo crtice, da bi bilo preglednije.

Uklanjanje elemenata iz niza

Baš kao što ih dodajemo, tako možemo i ukloniti elemente iz niza. Međutim, ovde moramo koristiti posebne metode. Isto kao i kod dodavanja elemenata, moguće je ukloniti elemenat sa početka, odnosno kraja niza.

Metod pop() uklanja poslednji element niza. Onda, kao rezultat vraća uklonjeni element.

uklonjen = a.pop() [a1, a2, a3, ..., an-1, ___]

Metod shift() uklanja prvi element niza. Isto kao malopre, posle uklanjanja kao rezultat vraća uklonjeni element.

uklonjen = a.shift() [___, a2, a3, ..., an]

Prazna mesta u primerima su samo radi lakšeg vizuelnog snalaženja, da biste preimetili odakle je uklonjen element. Inače u nizu ne ostaje prazno mesto. Dužina niza se smanjuje za jedan. Kod metoda shift() se svi indeksi pomeraju za jedan naniže.

Primer za uklanjanje elemenata


	var a = ["Pera", "Mika", "Joca", "Žika"];  // novi niz sa 4 elemenata

  var x = a.pop();  // x = "Žika"
  // a = ["Pera", "Mika", "Joca"]
  
  var y = a.shift();  // x = "Pera"
  // a = ["Mika", "Joca"]

splice()

Ovo je kompleksan metod, koji nam omogućava da istovremeno dodajemo i uklanjamo elemente na bilo kom mestu u nizu. Može se zadati u obliku sa dva ili više parametara:

uklonjeni = a.splice(indeks, broj) uklonjeni = a.splice(indeks, broj, e1,e2,e3...)

Generalno, metod splice() uklanja broj elemenata, počev od elementa indeks i umesto njih umeće elemente e1, e2, e3... Inače, različite vrendosti parametara imaju različita značenja:

a.splice(indeks, broj, e1, e2, e3...)
indeks Indeks elementa od koga počinje brisanje/dodavanje
  • Ako se zada indeks veći od poslednjeg elementa, podrazumeva se dužina niza, tj. prvi indeks posle poslednjeg elementa.
  • Ako se zada negativan broj, odbrojava se toliko elemenata od kraja niza.
broj Broj elemenata koji se uklanjaju, počev od elementa čiji je indeks zadat.
  • Moguće je zadati 0 - tada se ništa ne uklanja iz niza. Očekuje se da zadamo elemente koji se dodaju.
  • Ako se zada veći broj nego što ima elemenata do kraja niza, biće uklonjeni svi elementi do kraja.
e1, e2, e3... Elementi koji se dodaju.
  • Ako smo uklanjali neke elemente iz niza, novi elemnti se ubacuju umesto njih.
  • Ako nismo uklanjali elemente, novi elementi se ubacuju ispred elementa čiji smo indeks zadali.

Kao rezultat, ovaj metod vraća niz uklonjenih elemenata. Čak iako se ukloni samo jedan elemenat, biće to niz sa jedinm lementom. Ako se ni jedan elemenat ne ukloni, vraća prazan niz (niz sa bez elemenata).

Primer za uklanjanje elemenata


	var a = ["Joca", "Pera", "Mika", "Žika", "Tika"];
	
  var rem = a.splice(1,0, "Maca", "Braca");
  // ["Joca", "Maca", "Braca", "Pera", "Mika", "Žika", "Tika"]
  // rem = []
  
  rem = a.splice(-2,1);
  // a = ["Joca", "Maca", "Braca", "Pera", "Mika", "Tika"]
  // rem = ["Žika"]

  rem = a.splice(2, 3, "Mića", "Tića");
  // a = ["Joca", "Maca", "Mića", "Tića", "Tika"]
  // rem = ["Braca", "Pera", "Mika"]

Stek i red

Stek (stack) kao struktura podataka je dobro poznat u programiranju. U pitanju je kolekcija kod koju je moguće dodati ili ukloniti podatak po LIFO principu (Last In First Out). To znači da će podatak koji smo poslednji ubacili na stek, biti prvi koji dobijamo sa njega.

U programiranju se stek koristi za privremeno čuvanje podataka i idealan je za međurezultate operacija, pozive funkcija, rekurziju. Već pretpostavljate da mu je primarna upotreba u programskim jezicima niskog nivoa. Razumevanje funkcionisanja steka je neophodno za programiranje kompajlera (compiler - prevodilac na jezik niskog nivoa).

Red je struktura podataka koja podseća na stek, s tim što podaci dodaju i uklanjaju po FIFO (First In First Out) principu. To znači da najstariji uneti podatak prvi "izlazi" iz strukture.

Ova kolekcija podataka može biti korisna u web programiranju. Na primer, ako korisnik zahteva pristup podacima sa servera, a neophodno je da se zahtevi šalju tek po prispeću prethodnih rezultata, možemo smeštati zahteve u strukturu ovog tipa.

Inače, u programiranju se stek i red se obično simuliraju upotrebom vezanih lista, ali nizovi su u JavaScriptu dovoljno fleksibilni, da pomoću njih na lak način možemo dobiti istu funkcionalnost.

Niz možemo koristiti kao stek upotrebom metoda push() koji dodaje novi element na kraj niza i metoda pop() koji vraća i uklanja poslednji element niza.

a.push(E) // dodavanje na stek E = a.pop() // čitanje sa steka

Na sličan način možemo simulirati red metodima push() koji dodaje novi element na kraj niza i shift() koji vraća i uklanja prvi element niza.

a.push(E) // dodavanje u red E = a.shift() // čitanje iz reda
  1. T. Valentine, J. Reid (2013): JavaScript Programmer's Reference, Apress, New York
  2. A. Pehlivanian, D. Nguyen (2013): Jump Start JavaScript, SitePoint Pty. Ltd., Collingwood
Svi elementi sajta Web'n'Study, osim onih za koje je navedeno da su u javnom vlasništvu, vlasništvo su autora i ne smeju se koristiti, u celosti ili delimično bez pismenog odobrenja autora. To uključuje tekstove, slike, ilustracije, animacije, prateći grafički materijal i programski kod.
Ovaj sajt koristi tehnologiju kolačića (cookies) radi vođenja interne statistike u cilju unapređenja korisničkog iskustva. Tako prikupljeni podaci su anonimni i nedostupni trećim licima. Vaša privatnost nije ugrožena ni na koji način.