Jak vrátit výsledek z funkce která volá sama sebe v JS
Ahoj, funkce vrací v poli vždy jen jedno číslo, nevíte proč?
Pokud nahradím arr.push(obj.parid); za console.log(obj.parid); vypíšou se všechny čísla. Jako by se to pole přepisovalo, nemůžu na to přijít. Díky
Dá se to vyřešit tím, že var arr=[], nastavím jako globální, ale fuj..
function test(id){
var arr=[];
array.forEach(function(obj){
if(obj.catid===id){
arr.push(obj.parid);
arr.push(test(obj.parid));
}
});
return arr;
}
test(452)
A já si říkal, že je mi ten kód povědomý. Tohle jsi byl taky ty, že?
https://pc.poradna.net/questions/3166890-uprava-funkce-pro-ziskani-vsech-deti
Asi jo, ale to není JS. Stejně nevidím tu chybu :)
Asi jo? Já myslím, že ne asi, ale určitě, tak z nás laskavě nedělej blbce.
Marek 9, Petr99, pman, JAN60, host9, Marek70, Marek997, atd....
A pointa?
Pointa pro blbé: že když se budeš ptát na to samé pod různými jmény, můžeš být zablokován.
Odpověď pro blbé, jestli nevidíš rozdíl v dotazu tak se vrať do 1 první třídy, tam se učí číst. Více na tebe nereaguji, nestojíš mi za to, bezdůvodně mě akorát napadáš!
Nehraj si na ukřivděnýho a začni se chovat normálně (tzn. slušně), jinak končíš. Nebudu se tady s tebou dohadovat.
Chovám se slušně, jen ty se chováš jako arogantní hulvát. Bez důvodu mě napadáš a vyhrožuješ mi, zneužíváš práv administrátora, a to se mi vážně nelíbí!
Co z toho jsem porušil?
Svý jsem ti už řekl, zařiď se podle toho jak uznáš za vhodné. Dál tady s tebou nebudu ztrácet čas nějakým dohadováním a vysvětlováním. Tečka.
Slušné je používať jeden nick. Nie pri každej otázke vymýšľať nový. Je to dôkaz, že takto chceš oklamať tých, ktorí svoje nicky nemenia. A takýchto viac-nickových by administrátor Poradny mal ihneď zablokovať.
Podla mňa riešiť nicky na poradne, kde sa dá písať dotaz bez registrácie (účtu) je nezmysel, už len preto že hocikto (trebárs i dajaký Dežo z Malaciek) môže používať stejný nick, tzv. nick nie je unikátny. Takže i tak v podstate není jasné či je to stejný človek, ak neporovnávaš IP čo je tiež len orientačné, keď niektorý operátory za NATom majú stejnú IP pre mnoho ľudí, nehovoriac o dynamických IP. Kým nick nie je unikátny identifikátor používateľa, tak je to ako hádzanie hrachu na stenu.
Akorát tady znepřehledňuje vlákno arogantníma žvástama o ničem. Když procházím jiné vlákna, tak vidím, že se rád naváží do lidí - patrně je to jediné co tady dělá.
No tak na první pohled jsou v tom kódu pro Python dva cykly, ty tu máš jeden.
Ale to by nevracelo správný výsledek ani když by se to jen vypisovalo do console.log() a nefungovalo by to ani s tou globální proměnnou, nebo to na to má vliv? Díky za vysvětlení.
Jaká do toho dáváš data? Co ta funkce má přesně dělat? A co je podle tebe správný výsledek?
Klidně můžu dát ten vzor z PY
a výsledkem má být pole naplněné několika catid podle toho kolik má zadané id vnořených rodičů.
když zadám
test(9), očekývaný výsledek bude [1,0]
nebo
test(6), očekývaný výsledek bude [4,8,3,1,0]
nevím zda je to k pochopení.
No jak jsem psal, chybí tam ten druhý cyklus:
Díky. Můžeš si prosím pustit tento kód a říct mi proč to funguje s jedním cyklem?
Protože tam neplníš to pole.
Tím se vysvětluje i to, proč to funguje s tím globálním polem.
Můžeš mi objasni co ten druhý cyklus přesně dělá?
test(obj.parid).forEach((id) => arr.push(id));
test má parametr id, forEach má parametr id a push plní pole id stejným jako má parametr ten forEach, nechápu to. Díky
test(obj.parid) vrátí pole
.forEach((id) => arr.push(id)) to pole projde a každý prvek přidá do pole arr
Pole? obj.parid je přece číslo. Jak se z čísla stane pole?
Co vrací funkce test?
Ano, máš pravdu, dopletl mě ten parametr ve funkci test. Moc děkuji za pomoc.
Hodilo by se vidět i to pole, který má funkce test() procházet. Jinak mi to připadá jako nějaká rekurze, na řádku č. 6 voláš uvnitř funkce test() funkci test().
Co mi dál není jasný, že ve funkci test(id) máš v podmínce obj.catid, ale pak tu samou funkci voláš s jiným (?) klíčem objektu, test(obj.parid).
Prostě mi to bez toho pole není jasný.
Aha, koukám, že už je to tu dávno vyřešeno. Měl jsem otevřenou neaktualizovanou záložku příliš dlouho.