Pole v Javascriptu

Pole umožňuje mít v jedné proměnné více hodnot. To je dost užitečná věc.

Příklad se jmény dnů

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>

Zobrazit příklad.

Jiné způsoby práce s polem

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)

Funkce split znamená rozdělení řetězce podle oddělovače (v tomto případě je oddělovačem čárka).

Existují i rychlejší metody zápisu složitého pole. Následující příklad by se dal zapsat úsporněji, ale ilustruje případ, kdy potřebujete konkrétním indexům přiřadit konkrétní hodnotu (což je případ polí asociativních) a nechcete to psát přiřazováním po řádcích:

dnyVTydnu= {1:["pondělí"], 2:["úterý"], 3:["středa"], 4:["čtvrtek"], 5:["pátek"], 6:["sobota"], 7:["neděle"]}

document.write (dnyVTydnu[6]); // vypíše sobota

Dají se vytvářet i pole, která se chovají jako pole dvourozměrná (i když jde ve skutečnosti o pole polí). Trochu delší příklad by vám měl dát inpiraci. Vytváří pole se dvěma indexy, které se potom volají způsobem pole[index1][index2]:

pole = {
    1: {
        1: ["řetězec 1,1"],
        2: ["řetězec 1,2"]
    },
    2: {
        1: [2],
        2: [6],
        "ahoj": ["nazdar"]
    }
}

document.write (pole[1][2]); // vypíše řetězec 1,2
document.write (pole[2][2]); // vypíše šestku
document.write (pole[2]["ahoj"]); // vypíše nazdar

Jak vidíte, indexem i hodnotou opět může být číslo i řetězec. Také vidíte, že pole nemusí být obdélníkové (první index má dvě hodnoty, druhý má dvě nebo tři, jak chcete). Pokud užijete tohoto veselého zápisu, dejte si velký pozor, kde se píšou a nepíšou čárky a kde se píše chlupatá a kde hranatá závorka. Takto se dají tvořit i pole vícerozměrná, ovšem opět to formálně jsou pouze pole polí.

Délka pole

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:

Procházení pole cyklem

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.

Výběr náhodné položky

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.

Příklad: vypsání náhodného přísloví

<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 (losování, zaokrouhlení)
index = Math.floor(Math.random()*prislovi.length);

// zápis do dokumentu
document.write(prislovi[index]);

</script>

Zobrazit příklad.

Starší prohlížeče

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.

 

 

Reklama

www.webhosting-c4.cz, webhosting s doménou v ceně. 20GB
o tvorbě, údržbě a zlepšování internetových stránek

Návody HTML CSS JavaScript Články Ostatní

Základy, objekty Příklady

Jak psát web píše Yuhů, Dušan Janovský. Kontakt.