私は次のようなものを持っています:
[ {}, {children:[{}, {}]} , {} ] #each element cane be any level deep
再帰なしで反復したい。パフォーマンスの利点をテストするだけです。何か助けはありますか?
私は次のようなものを持っています:
[ {}, {children:[{}, {}]} , {} ] #each element cane be any level deep
再帰なしで反復したい。パフォーマンスの利点をテストするだけです。何か助けはありますか?
すべての再帰関数は、独自のスタックを保持する関数にショートカットできます。問題は、それがより高速かどうかです。そうではないと思います。
ここで私が意味するのは、(疑似コードで)のようなものです
function flatten(something) {
var ping=[];
var pong=[];
repeat {
if (ping is empty) {
if (something is empty) break;
else ping.prepend(something.shift());
}
var element=ping.shift();
if (element has children)
foreach (child of element in reverse order) ping.prepend(child);
else
pong.append(element);
}
return pong;
}
を呼び出すflatten(your_input_object)
と、そのエントリの「単純な人間のような列挙」リストが生成されます
私が間違っているかもしれませんが、配列に次の要素があるかどうかを確認できる場合は、ネストされたwhileループを記述できますか?