以下编码问题令我难过。有四个测试,以“// 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;
}
答案 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 次。所以你将有一个内循环:
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;
答案 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]