Metoda map
Metoda map umožňuje aplikovat zadanou
funkci na každý prvek pole. Přitom
metoda nemění původní pole, ale
vrací upravené.
Metoda v parametru přijímá funkci, která
se provede pro každý prvek pole.
To, co tato funkce vrátí pomocí return
pro prvku pole, se stane novou hodnotou
tohoto prvku (viz příklady).
Do funkce lze předat 3 parametry.
Pokud tyto parametry existují (nejsou povinné),
tak do prvního bude automaticky dosazen prvek
pole, do druhého bude dosazeno jeho pořadové číslo v poli
(index), a do třetího - samotné pole.
Syntaxe
javascriptlet nové pole = pole.map(function(prvek, index, pole) {
kód
return upravený prvek;
});
Příklad
Vytvoříme pole, kde každý prvek je dvakrát větší než odpovídající prvek výchozího pole:
javascriptlet arr = [1, 2, 3, 4, 5];
let res = arr.map(function(elem) {
return elem * 2;
});
console.log(res);
Výsledek provedení kódu:
javascript[2, 4, 6, 8, 10]
Příklad
Vytvoříme pole, kde každý prvek získáme tak, že hodnotu prvku vynásobíme jeho pořadovým číslem v poli:
javascriptlet arr = [1, 2, 3, 4, 5];
let res = arr.map(function(elem, index) {
return elem * index;
});
console.log(res);
Výsledek provedení kódu:
javascript[0, 2, 6, 12, 20]
Příklad
V případě potřeby lze do třetího parametru předat samotné pole:
javascriptlet arr = [1, 2, 3, 4, 5];
let res = arr.map(function(elem, index, arr) {
zde bude dostupné pole arr
});
Příklad
Metodu map lze použít i
pro průchod vícerozměrnými poli. Předpokládejme například,
že máme následující pole:
javascriptlet arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
Projděme toto pole pomocí
map a vypišme jeho prvky do konzole:
javascriptlet arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
let result = arr.map(function(elem) {
console.log(elem);
});
V důsledku toho console.log vypíše [1,
2, 3], poté [4, 5, 6], poté
[7, 8, 9].
Jak vidíte, do proměnné elem se dostávají
podpole. Nyní aplikujme metodu
map na každé podpole a umocněme
každý jeho prvek na druhou:
javascriptlet arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
let result = arr.map(function(elem) {
return elem.map(function(num) {
return num * num;
});
});
console.log(result);