0

私は次のようなものを持っています:

[ {}, {children:[{}, {}]} , {} ]  #each element cane be any level deep

再帰なしで反復したい。パフォーマンスの利点をテストするだけです。何か助けはありますか?

4

2 に答える 2

1

すべての再帰関数は、独自のスタックを保持する関数にショートカットできます。問題は、それがより高速かどうかです。そうではないと思います。

ここで私が意味するのは、(疑似コードで)のようなものです

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)と、そのエントリの「単純な人間のような列挙」リストが生成されます

于 2013-07-19T20:28:59.053 に答える
0

私が間違っているかもしれませんが、配列に次の要素があるかどうかを確認できる場合は、ネストされたwhileループを記述できますか?

于 2013-07-19T20:16:58.270 に答える