Predpokladám, že s poliami v JavaScripte ste sa už stretli. Dnes si však o nich povieme niečo viac. Ukážeme si, ako sa dá vytvoriť vlastné pole, ktoré sa bude správať podobne ako pole Array, ktoré je v JavaScripte už zabudované.
Dúfam, že ste si prečítali predchádzajúce články o objektoch, pretože polia a objekty sú jedno a to isté. Pole patrí, tak ako objekt, medzi dátové typy. V objektoch sme mali údaje, ktoré boli pomenované (vlastnosti). V poliach nie sú tieto údaje pomenované, ale očíslované (indexy). Polia v JavaScripte sa indexujú od nuly. Teda prvý prvok poľa má index 0. K prvkom poľa pristupujeme pomocou operátora [ ]. Pole vytvárame rovnako ako objekty, pomocou operátora new a konštruktora Array:
var pole = new Array(); // vytvorenie prázdneho poľa |
|
Uvedeným spôsobom by sme vytvorili prázdne pole, ktoré by neobsahovalo žiadne prvky. Druhý spôsob, ako vytvoriť pole už s určitým počtom prvkov je nasledovný:
var pole = new Array(5); // vytvorenie poľa s určitým počtom prvkov |
|
Posledný spôsob nám umožňuje vytvorenie poľa už s určitými hodnotami jednotlivých prvkov.
// vytvorenie poľa už s definovanými hodnotami prvkov var pole = new Array(„Kde“,“bolo“,“tam“,“bolo“,7,“trpaslíkov“); |
|
Pozornému oku iste neušla skutočnosť, že miešame reťazce s číslami, čo by sme si napr. v jazyku C nemohli dovoliť. JavaScript je však jazyk netypový, teda prvky poľa môžu byť rôzneho typu. Pri tomto poslednom spôsobe nezabudnite, že ak by ste chceli mať pole s jedným prvkom, ktorý bude mať napr. hodnotu 8, nemôžete pole vytvoriť nasledovne:
// chcem pole s jedným prvkom, ktorý má hodnotu 8 pole1 = new Array(8); // takto by to nešlo pole2 = new Array(); // ale takto áno pole2[0] = 8; |
|
V praxi nemá význam robiť pole s jedným prvkom, ale napr. pri testovaní metód sa to môže hodiť. Aby ste nedopadli ako ja, keď som hľadal chybu, prečo má to pole 8 prvkov a nie jeden prvok s hodnotou osem…
Môžeme si dokonca vytvoriť aj viacrozmerné pole, napríklad dvojrozmerné pole, čo je vlastne pole polí.
var pole = new Array(3); for(var i=0 ; i<3 ; i++) { pole [ i ] = new Array(3); for (var j=0 ; j<3 ; j++) pole [ i ] [ j ] = (i * 3) + j; } |
|
Pole vytvorené pomocou konštrukčnej funkcie Array má vlastnosť length, ktorá uchováva hodnotu počtu prvkov v poli. Pre pochopenie uvádzam opäť príklad:
pole = new Array(); // pole.length = 0 (prázdne pole) pole [ 8 ] = 0; // pole.length = 9 (prvky s indexom 0..8) pole = new Array( „jeden“ , „dva“ , 3 , „štyri“ , „päť“ ); // pole.length = 5 |
|
Pozrime sa na uvedený príklad podrobnejšie, pomocou prvku pole [ 8 ] sa vlastnosť length nastavila na hodnotu 9. Prvky 0..7 nie sú v tomto prípade definované. Teda v poliach JavaScriptu nemusia byť prvky definované „jeden za druhým“, ako je to napr. v jazyku C. Keď pridáme do tohto poľa prvok pole [ 500 ] = 123; vlastnosť length sa nám nastaví na 501, ale prvky s indexom 0..7 a 9..499 budú opäť prázdne. JavaScript nám oproti „céčku“ ponúka aj omnoho pohodlnejšiu prácu s poliami, a to pomocou metód, ale o tých až v druhej časti.
Ak by sme vlastnosť length nastavili na hodnotu menšiu, ako je aktuálna veľkosť poľa, pole sa zmenší na túto novú veľkosť. Naopak, ak by sme nastavili vlastnosť length na hodnotu väčšiu, ako je aktuálna veľkosť poľa, pole sa zväčší, teda budú k nemu pridané prvky s neznámou hodnotou (obyčajne prázdne). Príklad:
var pole = new Array( „jeden“ , „dva“ , 3 , „štyri“ , „päť“ ); // pole = jeden , dva , 3 , štyri , päť pole.length = 2; // pole = jeden , dva pole.length = 10; // pole = jeden , dva , , , , , , , , |
|
Konečne sa dostávame k vytvoreniu vlastnej konštrukčnej funkcie pre pole. Nebude sa síce chovať úplne rovnako, ako pole vytvorené pomocou Array, ale pre pochopenie, že pole je tiež objekt to postačí.
Napíšeme si funkciu (metódu), ktorá obráti poradie prvkov:
function prevratPole(){ // metóda poľa (obráti poradie prvkov) var zasobnik; var v = this.velkost – 1; for(var x=0 ; x < v - x ; x++){ zasobnik = this[x]; this[x] = this[v – x]; this[v – x] = zasobnik; } } |
|
A konštrukčnú funkciu pre vytvorenie poľa:
function konsPole(){ // konštrukčná funkcia poľa if(konsPole.arguments.length == 1){ // volané iba s jedným argumentom this.velkost = konsPole.arguments[0]; // veľkost poľa for(var index ; index < konsPole.arguments[0] ; index++) this[index]=0; // inicializácia prvkov } else { // argumenty sú hodnoty prvkov this.velkost = konsPole.arguments.length; // veľkosť poľa for (var index = 0 ; index < konsPole.arguments.length ; index++) this[index] = konsPole.arguments[index]; // priradenie hodnôt k prvkom poľa } this.prevrat = prevratPole; // metóda poľa } |
|
Pole je možné odteraz vytvoriť dvoma spôsobmi, buď bude vstupom len jedno číslo, ktoré hovorí o veľkosti poľa, alebo rovno vytvárame pole, kde sú argumentmi hodnoty prvkov poľa. V tomto poli môžeme použiť metódu prevrat(), ktorá obráti poradie prvkov poľa. Na záver si ukážeme príklad, na ktorom si odskúšame naše pole:
var p1 = new konsPole(„pole“,“v“,“Java“,“Scripte“); // p1 = pole,v,Java,Scripte p1.prevrat(); // p1 = Scripte,Java,v,pole var p2 = new konsPole(4); p2[1] = 123; p2[3] = „abc“; // p2 = undefined,123,undefined,abc p2.prevrat(); // p2 = abc,undefined,123,undefined |
|
V budúcej časti si podrobne popíšeme metódy, ktoré môžeme pri poliach používať.