Kreiranje JavaScript niza
JavaScript, kao i svaki ozbiljan programski jezik, može raditi sa različitim strukturama podataka. Verovatno najpoznatija (i najčešće korišćena) struktura je niz. Kao što verovatno do sada znamo, niz je struktura u kojoj se pod istim nazivom može zabeležiti više vrednosti, kojima se pristupa preko rednog broja, odnosno "indeksa".
Tako bi niz sa N elemenata u memoriji izgledao npr. ovako:
Indeks | 0 | 1 | 2 | ... | N-1 |
---|---|---|---|---|---|
Vrednost | "Milan" | "Jovan" | "Petar" | ... | "Zoran" |
Primetite da je u JavaScriptu prvi elemenat niza uvek sa indeksom 0.
U klasičnim, strogo tipiziranim programskim jezicima (Pascal, C...) niz se mora unapred deklarisati prema tipu vrednosti i sa unapred zadatim maksimalnim brojem elemenata. JavaScript je mnogo fleksibilniji. Kao i svaka druga promenljiva, niz se može deklarisati bilo gde u programu. Takođe, nigde se ne zadaje tip elemenata niza - svaki član niza je kao i bilo koja druga promenljiva - može biti bilo kog tipa.
Naravno, ako imamo makar malo zdravog razuma, nikada nećemo dozvoliti da se ovo zaista desi, jer je upravo poenta korišćenja niza da automatizujemo određene zadatke kroz ciklus. Upravo nam tada i treba da su svi elementi niza istog tipa, kako bismo sa svakim radili na isti način.
Niz se može kreirati suštinski na dva načina - preko konstruktora objekta Array (ili "stručno": kreiranjem instance klase Array) i korišćenjem literala ("nizovne konstante", odnosno "literala").
Kreiranje niza preko konstruktora | |
---|---|
a = new Array() | Kreiramo niz bez elemenata. |
a = new Array(N) | Kreiramo niz sa N nedefinisanih elemenata. |
a = new Array(C1,C2,...) | Kreiramo niz sa zadatim elementima. |
Kreiranje niza preko literala | |
a = [] | Kreiramo niz bez elemenata. |
a = [C1,C2,...] | Kreiramo niz sa zadatim elementima. |
Kada prilikom kreiranja niza odmah zadajemo i vrednosti, neke možemo preskočiti. Pod tim indeksom će se naći vrednost undefined.
var niz = [v, v, , v, v];
Matrice
JavaScript podržava i rad sa matricama, odnosno višedimenzionalnim nizovima. Drugi programski jezici nam omogućavaju da jednom komandom deklarišemo matricu, odnosno da zadamo sve dimenzije. U JavaScriptu se matrica definiše kao "niz nizova". To znači da prvo moramo da kreiramo niz, pa tek onda da za svaki element tog "glavnog" niza opet kreiramo "podniz".
var niz = [];
niz[0] = [];
niz[1] = [];
...
Takođe, višedimenzionalni niz možemo definisati tako što kao elemente niza odmah navodimo podnizove:
var niz = [ [v,v,...], [v,v,...], ... ];
Redeklarisanje niza
Šta se dešava kada za u promenljivoj koju smo koristili za niz, ponovo deklarišemo/definišemo niz? Šta se dešava ako toj promenljivoj kasnije dodelimo neku običnu vrednost?
var a = [v, v, v, v];
a = [];
U stvari na taj način uništavamo niz bez mnogo napora. Niš kao objekat postaje "dereferenciran" (nijedna promenljiva ga ne sadrži, odnosno ni jedna referenca ne pokazuej na njega). Tada ga automatski uklanja "sakupljač smeća" (garbage collector) - mehanizam JavaScripta koji uklanja ovakve objekte iz memorije. Na sličan način rade i jezici (virtuelne mašine) Java i .NET.
Kreiranje niza
var a = []; // prazan niz
var sestrici = ["Raja", "Gaja", "Vlaja"]; // niz stringova
var m1 = [[25,34], [18,51], [92,44]]; // matrica dimenzije 3x2
var m2 = [[17,49,38], [88,23,39]]; // matrica dimenzije 2x3
var obj = [{}, {}, {}, {}]; // niz od četiri objekta
var a1 = new Array(100); // niz od 100 nedefinisanih elemenata, numerisanih od 0..99
var a2 = new Array(100, 200, 50); // niz od 3 elemenata (brojevi 100, 200 i 50)