2016-10-30 5 views
0

私はEloquent JavaScriptコースに従っています。リストから配列を生成する必要があります。
これはリストです:JavaScriptの配列へのリスト

var list = {value: 10, rest: {value: 20, rest: null}} 

そして、これは「提案」コード/手順です:誰かがそれを説明してくださいすることができ、

function listToArray(list) { 
    var array = []; 
    for (var node = list; node; node = node.rest) 
    array.push(node.value); 
    return array; 
} 

私はループラインのを理解するのに苦労しています私には、ステップバイステップで?
Iの意味、途中で説明されている:

(listToArrayとn番目に)リスト上で実行するには、このようなループの仕様のために使用することができる。

(VARノード=リストについて; node; node = node.rest){}

これはどのように動作しますか?ループの繰り返しごとに、ノードは現在のサブリストをポイントし、ボディは現在の要素を取得するためにvalueプロパティを読み取ることができます。反復の最後に、ノードは次のサブリストに移動します。それがnullの場合、リストの最後に到達し、ループは終了します。

しかし、可能であれば、すべてのシングルステップがどのように「うまくいくか」(例があるかもしれません)を理解したかったのです。

for(var i = 0; i < something; i++) 

これは、ゼロの私でループを初期化します:forループ

+0

最初に不明な点は何ですか? – melpomene

+0

あなたが使用している 'list'はあなたの標準リストではありません。これは[LinkedList](http://www.i-programmer.info/programming/javascript/5328-javascript-data-structures-the-linked-list.html)です。リンクされたリスト内のすべてを繰り返し処理するには、各「ノード」の「残りの部分」を読み続ける必要があります。 – byxor

+3

'for(var node = list; node; node = node.rest)'これは 'list'で' node'を初期化します。次に、 'node'が存在するかどうかをチェックします。 「はい」の場合、ループを実行します。次の反復で 'node'が' node.rest'に設定されます – Rajesh

答えて

1

あなたの標準は、このようなものになるだろう。 2番目の引数はブール値で、真の場合はループが実行されます。最後に、最後にiを1だけインクリメントします。

あなたのループは同じである:

for (var node = list; node; node = node.rest) 

それがリストに(この場合はノード内)イテレータ変数を設定することにより、ループを初期化します。次にブールチェック(ノードがあるかどうか)を行い、最後に現在のノードを休止状態に設定します。

関連する問題