Hledání prvků: find(), some(), every()
Když chcete najít jedno zvíře podle jména, napíšete cyklus s příkazem break, jako v lekci o cyklech:
let leo;
for (const zvire of zvirata) {
if (zvire.jmeno === "Leo") {
leo = zvire;
break;
}
}
console.log(leo);{ jmeno: "Leo", druh: "lev", vek: 6 }let leo; vytvoří proměnnou bez hodnoty, takže je v ní zatím undefined. Cyklus do ní uloží zvíře, jakmile ho najde.
Metoda find() to zvládne na jednom řádku. Vrátí první prvek, pro který callback vrátí true, a stejně jako cyklus s break už dál nehledá:
const leo = zvirata.find((zvire) => zvire.jmeno === "Leo");
console.log(leo.druh);levNa rozdíl od filter(), který vrací vždycky pole, vrátí find() přímo nalezený prvek. Když podmínku nesplní žádný prvek, vrátí undefined. Čtení vlastnosti z undefined ukončí program chybou, a proto výsledek nejdřív zkontrolujte:
const tygr = zvirata.find((zvire) => zvire.druh === "tygr");
if (tygr === undefined) {
console.log("Tygra nemáme.");
} else {
console.log(tygr.jmeno);
}Tygra nemáme.Někdy samotný prvek nepotřebujete, stačí vám odpověď ano, nebo ne. some() vrátí true, když callback vrátí true aspoň pro jeden prvek. every() vrátí true, jen když callback vrátí true pro všechny:
console.log(zvirata.some((zvire) => zvire.vek > 10));
console.log(zvirata.every((zvire) => zvire.vek > 3));true
falseToníkovi je víc než 10 let, takže some() vrátí true. Pepíkovi jsou jen 2 roky, takže ne všechna zvířata jsou starší než 3 roky a every() vrátí false.
Typická chyba je použít filter(), když chcete jeden prvek. zvirata.filter((zvire) => zvire.jmeno === "Leo").druh dá undefined: filter() vrátí pole, ve kterém je Leo, a pole žádnou vlastnost druh nemá.
Jak psát:
Pokyny
Pomocí find() najděte knihu, jejíž název je v hledana, a vypište jejího autora: Michael Ende. Když knihovna takovou knihu nemá, vypište místo toho Tuhle knihu nemáme. Vyzkoušejte to: změňte hledana na "Heidi" a pak zase zpátky.
Pod to pomocí some() vypište, jestli je dostupná aspoň jedna kniha: Některá dostupná: true. Tip: ve vlastnosti dostupna už je true nebo false, takže ji callback může rovnou vrátit.
Nakonec pomocí every() vypište, jestli jsou dostupné všechny knihy: Všechny dostupné: false.