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

时间:2018-10-21 18:53:25

标签: javascript arrays

我的JS函数有问题。为了简化,我想用其他n个数组(arr2)填充数组(arr1)。在我的循环中,我为arr1中的当前位置使用一个计数器(出于某种原因,不能使用arr1.push)。如果我将所有的arr2都记录在arr1中,它们都是一样的,总是最后一个被添加。所以我写了一个基本的脚本来测试它。我总是记录第一个元素并增加计数器。 我是JS的新手,我是否有一些误会?

function test(){
	var arr1 = [];
	var arr2 = [];
	var counter=1;
	arr2[0]="first";
	arr2[1]="first";
	arr2[2]="first";
	arr1[0]=arr2;
  arr1[0].forEach(function(elem){console.log(elem);});
	for (var i = 0; i < 10 ; i++) {
		arr2[0]=counter;
		arr2[1]=counter;
		arr2[2]=counter;
		arr1[counter]=arr2;
    
		arr1[0].forEach(function(elem){console.log(elem);});
		counter++;
	}
}
<button onclick="test()">Click</button>

2 个答案:

答案 0 :(得分:1)

您可以尝试使用传播运算符。

.data()

数组是引用类型,因此您始终引用基数,而不是将其副本放在arr1内,而是对arr2的引用。

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

您可以通过创建一个新的Array或更现代的... spread运算符来实现此目的

答案 1 :(得分:0)

正如Pointy所说的,它只是引用了arr2而不创建副本。

所以您需要

arr2=new Array();

在循环的开始。