为什么这个数组复制不能按预期工作?

时间:2016-10-21 08:58:37

标签: javascript arrays

我正在学习javascript,我正在尝试使用以下代码将一个数组的内容复制到另一个数组:

var arr1 = [1, 2, 3];
var arr2 = [];

// I expect it to copy elements from arr1 to arr2
arr1.forEach(Array.prototype.push, arr2);

// I expected the length of arr2 to be 3
console.log(arr2.length);  // but it logs 9

请不要建议我替代方法来复制数组内容,我正在学习JS并想知道它为什么不起作用?谢谢

3 个答案:

答案 0 :(得分:3)

如果您检查arr2,您会看到它包含以下内容:

Array [ 1, 0, Array[3], 2, 1, Array[3], 3, 2, Array[3] ]

这是因为forEach yields three arguments to supplied callback: element of the array, index of that element and the array itself。所有这些都由您的处理程序添加到arr2

答案 1 :(得分:1)

由于您将Array.prototype.push作为函数传递,它将采用forEach回调处理程序所需的所有三个参数(项,索引,数组)并将其推送到数组。

看看这个输出

[1, 0, Array[3], 2, 1, Array[3], 3, 2, Array[3]]

您要在n+0th索引处添加项目,在n+1th索引处索引,在n+2th索引处添加数组。

答案 2 :(得分:1)

包装函数以去掉forEach传递给push的第二个和第三个参数:

var arr1 = [1, 2, 3];
var arr2 = [];

arr1.forEach(function(value, index, arr) {
  this.push(value);
}, arr2);

console.log(arr2);