数组中的Javascript数组-始终覆盖第一个索引

数组中的Javascript数组-始终覆盖第一个索引,javascript,arrays,Javascript,Arrays,我的JS函数有问题。为了简化,我想用n个其他数组(arr2)填充一个数组(arr1)。在我的循环中,我对arr1中的当前位置使用计数器(出于某种原因,无法使用arr1.push)。如果我在arr1中记录我的所有arr2,它们都是相同的,总是最后添加的一个。所以我写了一个基本的脚本来测试它。我总是记录第一个元素并激励计数器。 我是JS的新手,有没有什么大的误解我不明白 功能测试(){ var arr1=[]; var arr2=[]; var计数器=1; arr2[0]=“第一”; arr2[1

我的JS函数有问题。为了简化,我想用n个其他数组(arr2)填充一个数组(arr1)。在我的循环中,我对arr1中的当前位置使用计数器(出于某种原因,无法使用arr1.push)。如果我在arr1中记录我的所有arr2,它们都是相同的,总是最后添加的一个。所以我写了一个基本的脚本来测试它。我总是记录第一个元素并激励计数器。 我是JS的新手,有没有什么大的误解我不明白

功能测试(){
var arr1=[];
var arr2=[];
var计数器=1;
arr2[0]=“第一”;
arr2[1]=“第一”;
arr2[2]=“第一”;
arr1[0]=arr2;
arr1[0].forEach(函数(elem){console.log(elem);});
对于(变量i=0;i<10;i++){
arr2[0]=计数器;
arr2[1]=计数器;
arr2[2]=计数器;
arr1[计数器]=arr2;
arr1[0].forEach(函数(elem){console.log(elem);});
计数器++;
}
}

单击
正如Pointy所说,它只是引用了arr2,没有创建副本

所以你需要

arr2=new Array();

在循环开始时。

您可以尝试使用扩展运算符

arr1[0]=[...arr2];
arr1[counter]=[...arr2];
数组是一种引用类型,因此您总是引用基数组,而不是将其副本放在arr1中,而是对arr2的引用

您希望将arr2的副本分配给arr1


你可以通过创建一个新的数组或者更现代的。。。扩展运算符

每次通过循环时,您都必须创建一个新的
arr2
。。。。因为
arr1[0]=arr2不复制
arr2