我正在学习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并想知道它为什么不起作用?谢谢
答案 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);