2017-06-24 9 views
1

私はフリーコードキャンプのスチームローラーの問題に取り組んでいました。私は2つの解決策を思いつきました:1つは完全に[1,2,3,4]で動作しますが、もう1つは[4]を与えています。配列を平坦化するための再帰

この問題は、あらゆる種類の配列を平坦化する関数を書くように求められます。

私の作業コード:

function steamrollArray(arr) { 
    newArr = []; 
    for (i = 0; i < arr.length; i++) { 
    if (Array.isArray(arr[i]) === true) { 
     newArr = newArr.concat(steamrollArray(arr[i])); 
    } else if (Array.isArray(arr[i]) === false) { 
     newArr.push(arr[i]); 
    } 
    } 
    return newArr; 
} 
steamrollArray([1, [2], [3, [[4]]]]); 

私の働いていませんコード:

function steamrollArray(arr) { 
    newArr = []; 
    for (i = 0; i < arr.length; i++) { 
    if (Array.isArray(arr[i]) === true) { 
     newArr.push(steamrollArray(arr[i])); 
    } else if (Array.isArray(arr[i]) === false) { 
     newArr.push(arr[i]); 
    } 
    } 
    return newArr; 
} 
steamrollArray([1, [2], [3, [[4]]]]); 

第二のコードは[4]にのみ与える、なぜ誰も説明できますか?最初のコードでは、あなたはローカル変数に代入されている

newArr = newArr.concat()を使用しているので起こり

+0

freecodecampチャットをこの質問タイプで使用できますか? – galkin

+0

はいIcanですが、このすばらしいウェブサイトを使用してみませんか? –

答えて

0

。したがって、再帰でさえ、状態は保存されます。

しかし、2番目のコードでは、newArr.push()を使用しており、再帰では、もう一度newArr=[]と宣言しています。

これは問題です。

関連する問題