Výběr prvků: filter()

V lekcích o cyklech a objektech jste napsali spoustu cyklů, které procházejí pole: aby z něj vybraly některé prvky, posbíraly jejich jména nebo jeden z nich našly. To programy potřebují pořád, a proto mají pole metody, které to udělají za vás, každá na jediném řádku. Každá metoda v této lekci nahrazuje cyklus, který už umíte napsat.

Tady je cyklus, který vybere teploty nad 20 stupňů:

const teploty = [18, 24, 27, 15, 21];

const teple = [];
for (const teplota of teploty) {
    if (teplota > 20) {
        teple.push(teplota);
    }
}
console.log(teple);
[24, 27, 21]

Metoda filter() udělá totéž na jednom řádku:

const teple = teploty.filter((teplota) => teplota > 20);
console.log(teple);
[24, 27, 21]

Argumentem metody filter() je funkce, tady šipková funkce (teplota) => teplota > 20. filter() ji zavolá pro každý prvek pole a předá jí ho jako argument. Když funkce vrátí true, prvek se dostane do nového pole. Když vrátí false, prvek se vynechá. Funkce je tedy podmínka z příkazu if v cyklu. Funkci, kterou předáte jiné funkci, aby ji pak sama volala, se říká callback (čte se „kólbek“).

filter() původní pole nemění: v teploty je pořád všech pět čísel. Vrátí nové pole a to si uložíte do proměnné. Když podmínku nesplní žádný prvek, je nové pole prázdné: [].

V poli objektů dostane callback pokaždé jeden celý objekt, stejně jako proměnná cyklu for...of:

const zvirata = [
    { jmeno: "Toník", druh: "slon", vek: 12 },
    { jmeno: "Leo", druh: "lev", vek: 6 },
    { jmeno: "Žofka", druh: "žirafa", vek: 4 },
    { jmeno: "Pepík", druh: "tučňák", vek: 2 }
];

const mlada = zvirata.filter((zvire) => zvire.vek < 5);
console.log(mlada);
console.log("Mladá zvířata:", mlada.length);
[{ jmeno: "Žofka", druh: "žirafa", vek: 4 }, { jmeno: "Pepík", druh: "tučňák", vek: 2 }]
Mladá zvířata: 2

Délka nového pole říká, kolik prvků podmínku splnilo. Je to vzor počítání z lekce o cyklech, jen na jednom řádku.

Typické chyby:

  • Výsledek se nepoužije. Samotný řádek teploty.filter((teplota) => teplota > 20); vytvoří nové pole a hned ho zahodí a v teploty zůstane všechno, jak bylo. Výsledek si uložte do proměnné, nebo ho vypište.
  • Složené závorky bez return, jako v lekci o funkcích. (teplota) => { teplota > 20 } vrátí undefined, což se počítá jako nepravda, a tak bude nové pole vždycky prázdné.

Pokyny

Test splnil, kdo získal aspoň 30 bodů. Vytvořte konstantu uspeli a pomocí filter() do ní uložte výsledky žáků, kteří test splnili. Vypište uspeli: v konzoli by se měly objevit výsledky Anny, Kláry a Evy.

Pod to vypište, kolik žáků test nesplnilo (mají méně než 30 bodů): Neuspěli: 2. Použijte filter() a length.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

Zpět

1/10

Další