Pole umožňuje mít v jedné proměnné více hodnot. To je dost užitečná věc.
Budu chtít, aby mi javascript vypsal česky dnešní den, třeba pondělí. Objekt Date() zná aktuální datum a pomocí metody getDay() se z toho dá vytáhnout číslo dne. Problém je, jak z toho čísla dostat třeba "pondělí". To právě řeší pole.
Pole se v Javascriptu zakládá třeba takhle:
var proměnná = new
Array("první hodnota", "druhá hodnota");
konkrétně u dní v týdnu to bude například:
denJakoSlovo
= new Array("neděle", "pondělí", "úterý", "středa", "čtvrtek", "pátek",
"sobota");
Když potom třeba zavolám denJakoSlovo[0], vrátí mi hodnotu "neděle". Počítá se to od nuly. Takže celý příklad:
<script>
datum = new Date(); // vytáhne dnešní datum
denJakoCislo = datum.getDay()
// v tuto chvíli mám den v týdnu jako číslo od nuly do šesti
denJakoSlovo = new Array("neděle",
"pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota");
// to je to pole počítané anglosasky od neděle
document.write("Dnes je ");
document.write(denJakoSlovo[denJakoCislo]);
// vypisuju položku pole s aktuálním (číselným) indexem
</script>
Namísto konstrukce proměnná = new Array() se může psát
promenna = ["hodnota0", "hodnota1","hodnota2"];
Přitom se hodnoty automaticky počítají (indexují) od nuly. Takže např. promenna[1] je rovno "hodnota1".
Kdykoliv se může přidat další hodnota:
promenna[3] = "hodnota3";
Nebo změnit stávající hodnota:
promenna[2] = "druhá hodnota";
Tomu číslu v hranatých závorkách se říká index. Pokud není uvedeno jinak, jsou indexy čísla od nuly. Indexem může být také řetězec:
promenna["ahoj"] = "nazdar";
V předchozích ukázkách byly hodnoty pole řetězce (zapisované v uvozovkách). Ale mohou to být stejně tak čísla.
promenna[8] = 1260;
Pole může vzniknout jako výsledek nějaké metody. Kdybych měl řadu čísel oddělenou čárkami, pak ji do pole rozdělím pomocí funkce split:
rada= "první,druhá,třetí,čtvrtá";
var poleRada = rada.split(",");
alert(poleRada[1]) // vypíše druhá (je to od nuly)
Každé pole má vlastnost .length, které většinou určuje počet hodnot v poli. Přesněji řečeno určuje nejvyšší číselný index plus jedna. Což ve většině případů (když se indexy nechávají vznikat automaticky, když se čísla indexů nevynechávají a nedávají se řetězcové indexy) počtu hodnot v poli odpovídá.
Délka pole promenna.length se v praxi používá hlavně na dvě věci:
for(i=0;i<promenna.length;i++){
// něco se dělá s promenna[i]
}
Pomocná proměnná i se zvětšuje od nuly až do nejvyššího indexu.
nahodnaHodnotaZPole = promenna[Math.floor(Math.random()*promenna.length)];
Math.floor je zaokrouhlování dolů (pole je počítáno od nuly, takže floor se přesně hodí), Math.random() vrací náhodné číslo od nuly do jedničky.
<script>
prislovi = new Array(
"Odborník je člověk, který ví, co v daném oboru neumí.", // odděleno čárkami
"Hudba zdvojnásobí každý příběh.",
"U ohně je jeden hlas lepší než tři kytary.",
"Jeden obrázek se stahuje stejně dlouho jako tisíc slov.",
"Neexistuje něco jako hloupá otázka."
);
// výpočet, které přísloví se bude vypisovat
index = Math.floor(Math.random()*prislovi.length);
// zápis do dokumentu
document.write(prislovi[index]);
</script>
Myslím, že třetí verze prohlížečů ještě neumějí s objektem Array pracovat tak, jak popisuji výše. Pro ty se muselo pole zakládat jako zvláštní objekt (funkce jako konstruktor) a přiřazovat mu hodnoty (jako argumenty konstruktoru). Dnes takový zdlouhavý postup považuji za zbytečný, ale kdyby to snad někdo potřeboval:
function stareArray()
{
this.length = stareArray.arguments.length;
for (var i = 0; i < this.length; i++)
this[i] = stareArray.arguments[i];
}
/* Naplnění pole */
promenna = new stareArray("hodnota","hodnota1","hodnota2 atd.");
Funguje to stejně jako normální pole.
o tvorbě, údržbě a zlepšování internetových stránek