Autor Zpráva
Wan
Profil *
Ahoj,
jaký je prosím rozdíl mezi tímto cyklem

items.forEach(function(item){
        if (item.parent_id === targetId) children.push(item);
});

a tímto cyklem

for (var item in items){
        if (item.parent_id === targetId) children.push(item);
}

ten druhý nefunguje, proč? Děkuji
Radek9
Profil
Wan:
Metoda forEach slouží pro procházení polí. Oproti klasickému cyklu je to však mírně pomalejší. Zároveň nemáš k dispozici příkazy continue (ten se dá simulovat pomocí return) a break (ten se ve forEach simulovat nedá, musel bys použít every nebo some).

Cyklus for...in slouží pro procházení klíčů objektu. Nikoli pro procházení polí.

Co asi hledáš, je cyklus for...of:
for (var item of items){
        if (item.parent_id === targetId) children.push(item);
}
Podpora ale není dokonalá.
Tomášeek
Profil
Radek9:
Nejsem úplně JS profík, ale pokud podpora for...of není dokonalá (přiznám se, že tento cyklus neznám), nestačí použít klasický

for (var i = 0; i < items.length; i++) {...}

?
Radek9
Profil
Tomášeek:
Jistě, stačí. Jen je to takové ukecané. :-) Navíc cyklus for...of umí procházet libovolnou kolekci (např. Map, Set nebo obecný iterátor). A když už jsme u toho, tak v tomto konkrétním případě ([#1]) dává mnohem větší smysl použít metodu filter:

const children = items.filter(item => item.parent_id === targetId)
Tomášeek
Profil
Radek9:
Díky za vysvětlení :-)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0