Převod prvků: map()
Další cyklus, který dobře znáte, projde pole a z každého prvku udělá něco nového. Tenhle vytvoří pole se jmény zvířat z pole zvirata z minulého cvičení:
const jmena = [];
for (const zvire of zvirata) {
jmena.push(zvire.jmeno);
}
console.log(jmena);["Toník", "Leo", "Žofka", "Pepík"]Právě na to je metoda map():
const jmena = zvirata.map((zvire) => zvire.jmeno);
console.log(jmena);["Toník", "Leo", "Žofka", "Pepík"]I map() zavolá callback pro každý prvek a to, co callback vrátí, dá do nového pole, ve stejném pořadí. Nové pole má proto vždycky stejný počet prvků jako to původní. Callback může vrátit cokoli: vlastnost, výsledek výpočtu nebo text.
const veky = zvirata.map((zvire) => zvire.vek);
const vekyZaRok = veky.map((vek) => vek + 1);
const popisky = zvirata.map((zvire) => `${zvire.druh} ${zvire.jmeno}`);
console.log(vekyZaRok);
console.log(popisky);[13, 7, 5, 3]
["slon Toník", "lev Leo", "žirafa Žofka", "tučňák Pepík"]Stejně jako filter() ani map() původní pole nemění: v veky je pořád [12, 6, 4, 2].
V mnoha programech uvidíte také metodu forEach(). I ta zavolá callback pro každý prvek, ale žádné nové pole nevytvoří. Je to jen jiný zápis cyklu for...of:
zvirata.forEach((zvire) => console.log(zvire.jmeno));Toník
Leo
Žofka
PepíkDělá totéž co for (const zvire of zvirata) { console.log(zvire.jmeno); }, takže použijte, co je vám milejší. Když potřebujete nové pole, použijte map().
Typická chyba je callback se složenými závorkami, ale bez return. zvirata.map((zvire) => { zvire.jmeno; }) dá [undefined, undefined, undefined, undefined], protože callback nevrátí nic pro žádné ze zvířat.
Jak psát:
Pokyny
Přepište cyklus, který plní jmena, pomocí map(): const jmena = hraci.map(...);. Prázdné pole i cyklus smažte. Program pak vypíše totéž co předtím: ["Tomáš", "Kuba", "Ondra", "Matěj"].
Pod to vytvořte pomocí map() konstantu dresy: pro každého hráče text se jménem a s číslem v závorce, třeba "Tomáš (7)". Vypište dresy.
Na výsledkové tabuli jsou jména velkými písmeny. Vytvořte z jmena pomocí map() a toUpperCase() konstantu tabule a vypište ji: ["TOMÁŠ", "KUBA", "ONDRA", "MATĚJ"].