Úloha 4 – Filtrování a textový výstup z pole objektů

Úvod do úlohy

Řetězení metod (method chaining) je technika, která umožňuje skládat více operací nad polem do jednoho čitelného „potrubí“. Místo několika mezikroků si data nejprve vyfiltrujeme (filter()), pak je přetransformujeme (map()) a nakonec zformátujeme do textu (join()), případně do HTML seznamu. V praxi tak snadno vytvoříš výstupy typu „Seznam všech odjezdů po 15:00 ve formátu Linka – cíl (čas)“ bez ručního psaní cyklů a dočasných proměnných.


Teorie a principy

  • Řetězení funguje díky tomu, že filter() a map() vrací nové pole, na kterém můžeš hned volat další metodu.

  • Typické pořadí je filter().map().join():

    1. filter() – zmenší data na relevantní podmnožinu.

    2. map() – přetvoří prvky (např. objekt → řetězec).

    3. join() – spojí pole řetězců do jednoho textu s oddělovačem.

  • Pořadí záleží: map().filter() často dělá zbytečnou práci navíc (nejdřív transformuješ vše, i to, co nakonec vyhodíš).

  • Čitelnost: i když je řetězení krátké, vždy přidej komentář a udrž logiku srozumitelnou.

  • Podmínky piš explicitně (např. if (spoje.length > 0 == true)) – pro začátečníky je to přehlednější (ekvivalent zkrácení: if (spoje.length > 0)).


Praktické příklady kódu

Pozor: v příkladech výše je záměrně použito porovnávání časů jako řetězců HH:MM. Aby fungovalo správně, dbej na dvě číslice u hodin i minut (např. "08:05" místo "8:5").


Typické chyby / záludnosti

  • Zapomenuté return v callbacku u map()/filter() – bez něj se vrací undefined a řetězení selže.

  • Záměna výsledných typů:

    • filter() a map() vrací pole, lze pokračovat map() nebo join().

    • find() vrací jeden objekt (nebo undefined), nejde na něj volat join().

  • Nesprávné pořadí operací – map().filter() zbytečně zatěžuje běh (nejprve převeď vše, potom vyhoď část). Lepší je filter().map().

  • Nevalidní formát času – "8:30" > "15:00" vrací true, což je špatně pro záměr. Použij "08:30".

  • Chybné spojení při tvorbě HTML – join(", ") by v <ul> přidával čárky mezi <li>. Do HTML seznamu proto spojuj prázdným řetězcem "".


Shrnutí

  • Řetězení metod dává čitelný „tok“ zpracování: filter() → map() → join().

  • filter() zmenšuje data, map() je formátuje, join() z nich udělá finální text.

  • Na jednotlivý prvek použij find() a teprve pak jej formátuj do textu.

  • Dodržuj validní časový formát HH:MM a piš explicitní podmínky.

  • Při tvorbě HTML seznamů zvol vhodný oddělovač v join() (pro <li> často "").