JS代码返回n次数组不起作用

时间:2016-10-14 03:00:47

标签: javascript

以下编码问题令我难过。有四个测试,以“// ex”开头。它们后跟我的代码。我的代码只通过了第一次测试。我不确定为什么下一次失败.3。提前感谢您的任何见解。

// 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;
}

4 个答案:

答案 0 :(得分:5)

你的问题就在这一行:

arr.push(array);

这样做是将整个数组作为单个元素推送,所以你得到:

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

但你要做的是推送数组的内容,n次。

您可以解决此问题的一种方法是,在每次迭代时,您将array连结到arr,而不是推送:

arr = arr.concat(array);

另一种方法是调用Array.prototype.push并传递arr作为要推送的上下文,并将array作为要推送的参数:

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

或者在ES6中,您可以使用spread运算符执行相同的操作:

arr.push(...array)

作为self demonstrated,您还可以为每个n创建一个内部循环,迭代array并将其元素添加到arr

答案 1 :(得分: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]))

答案 2 :(得分:1)

看起来您需要将数组的每个值都推送到新数组 n 次。所以你将有一个内循环:

&#13;
&#13;
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])
&#13;
&#13;
&#13;

答案 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]