2017-12-12 8 views
0

私のコードで何が問題なのか分かりませんが、助けてください。私は配列を複製する関数を作りたいと思います: fuction duplicate([1,2,3,4] 答え:[1,2,3,4,1,2,3,4]。重複機能javascript

var arr1 = []; 

function duplicate(arr){ 
    arr1 = arr; 
    for(var i = 0;i<arr.length;i++){ 
     arr1.push(arr[i]);  
    } 
    return arr1 
} 

あなたが無限ループを取得しますので、あなたは、エンドだループ条件として、それはlengthだ使用中に配列を反復処理し、それに追加することはできません任意の助け

+0

あなたのコードは現在何をしていますか? –

+1

なぜ['Array#concat'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)を使用しないのですか? –

答えて

4

をありがとう。

Slice配列クローンを作成してから元に戻し、クローンにプッシュしてください:

function duplicate(arr){ 
 
    var temp = arr.slice(); 
 
    
 
    for(var i = 0;i<arr.length;i++){ 
 
     temp.push(arr[i]);  
 
    } 
 
    return temp; 
 
} 
 

 
console.log(duplicate([1, 2, 3, 4]));

容易溶液自体にArray#concat配列になるであろう:

function duplicate(arr){ 
 
    return arr.concat(arr); 
 
} 
 

 
console.log(duplicate([1, 2, 3, 4]));

+1

また、 'return [... arr、... arr];' – Andy

1

アレイは単に宣言することを意味し、参照によって渡されていますそれを指す別の変数は同じ配列を指しています。そして、それをループするときに、長さがあなたがそれに追加するにつれて拡大し続けるので、条件i < arr.lengthを決して満たしません。

ループを開始する前に、配列の長さをキャプチャする必要があります。

または、別のアプローチをとる他の回答の1つを使用してください。