Polia v JavaScripte – tvorba

26. ledna 2001

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ť.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *