2016-10-14 3 views
1

次のコード問題が動作していないn回戻ります。 「// ex。」で始まる4つのテストがあります。彼らには私のコードが続きます。私のコードは、最初のテストに合格しています。私はなぜそれが次の3に失敗しているのか分かりません。事前の感謝のおかげで。JSコードは、配列は私が困惑している

// 1.4 repeat(n, array) 
// Write a function that takes a non-negative integer n and an array and   returns a new 
// array that contains the contents of given array repeated n times. 
// ex. repeat(0, [1]) -> [] 
// ex. repeat(10, []) -> [] 
// ex. repeat(1, [1, 2, 3]) -> [1, 2, 3] 
// ex. repeat(3, [1, 2, 3]) -> [1, 2, 3, 1, 2, 3, 1, 2, 3] 

toolbox.repeat = function(n, array) { 
    var arr = []; 
    for(var i = 0; i < n; i++){ 
    arr.push(array); 
    } 
    return arr; 
} 
+0

に少し変更してください間違っていると、異なるを参照してください。基本的な問題です。 –

+0

あなたは、配列の配列を作成しているが、機能はプリミティブの配列を返すことになっています。 – david25272

答えて

1

あなたの新しい配列のn倍に配列の各値をプッシュする必要があるように見えます。あなたがの内側のループがありますので:

var repeat = function(n, array) { 
 
    var arr = []; 
 
    for(var i = 0; i < n; i++) { 
 
    for(var j = 0; j < array.length; j++) { 
 
     arr.push(array[j]); 
 
    } 
 
    } 
 
    console.log(arr); 
 
} 
 

 
repeat(0, [1]) 
 
repeat(10, []) 
 
repeat(1, [1, 2, 3]) 
 
repeat(3, [1, 2, 3])

+0

は、残念ながら、これはOPがarr' n回 ''に全体array'を追加する必要があり、動作しません、ちょうど(と仮定すると、nは境界内にある)一度内容をコピーしようとしない – nem035

+0

これは動作するはずです。これは、内側のループになり –

+0

ああ、あなたは、私の悪い屋を持って、二つのループを意味しました。 – nem035

5

をあなたの問題は、この行です:

arr.push(array); 

これはそう、単一の要素として配列全体をプッシュしない何あなたは次のようになります:

[ [], [], ... n times ] 

しかし、あなたがしたいことは配列の内容は、n回です。

arr = arr.concat(array); 

もう一つの方法は、Array.prototype.pushを呼び出し、プッシュするにコンテキストとしてarrを渡すために、次のようになります。あなたがこの問題を解決することができます

一つの方法は、各反復でarrarrayをCONCAT、代わりにプッシュするのにありますプッシュする引数としてとarray

Array.prototype.push.apply(arr, array); 

それともES6にあなたが同じことを行うためにspread演算子を使用することができます。

arr.push(...array) 

self demonstratedとして、あなたはまた、すべてのnため、オーバーarrayを反復処理しarrにその要素を追加するための内部ループを作成することができます。

+0

これは確かに多分もっと熟語的です。しかし、私は、この演習ではベストではないかもしれない実装を隠していると思います。 –

+1

ええ、それは理にかなっています。私はそれが練習の正確な目的に依存すると思うが、それは私もあなたの答えを参照している理由です:) – nem035

3

あなたが使用する必要がありますarray.concat代わり

var repeat = function(n, array) { 
 
    var arr = [] 
 
    for(var i = 0; i < n; i++){ 
 
    arr = arr.concat(array); 
 
    } 
 
    return arr; 
 
} 
 

 
console.log(repeat(3,[1,2,3]))

0

あなたのコードは、あなたがどこ一部に結果の配列をプリントアウトすることができます

toolbox.repeat = function(n, array) { 

    var arr = []; 

    for(var i = 0; i < n; i++) { 
    // use concat array instead 
    arr = arr.concat(array); 

    return arr; 
} 

// repeat(0, [1]) -> [] 
// repeat(10, []) -> [] 
// repeat(1, [1, 2, 3]) -> [1, 2, 3] 
// repeat(3, [1, 2, 3]) -> [1, 2, 3, 1, 2, 3, 1, 2, 3] 
関連する問題