如何解决数组优先索引中的JavaScript数组总是被覆盖?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (92)

我的JS功能有问题。为简化起见,我想用其他n个数组(arr2)填充数组(arr1)。在我的循环中,我使用arr1中当前位置的计数器(出于某种原因无法使用arr1.push)。如果我在arr1中记录我所有的arr2,它们都是相同的,总是最后添加的那个。所以我写了一个基本的脚本来测试它。我总是记录第一个元素并输入计数器。我是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>
提问于
用户回答回答于

可以尝试使用spread opperator。

ARR1 [0] = [... ARR2]; ARR1 [计数器] = [... ARR2];

数组是一种引用类型,因此你总是会对基数进行处理,你不要将它的副本放在arr1中,而是对arr2进行引用。

希望将arr2的副本分配给arr1。可以通过创建一个新数组或更现代的... spread opperator来实现

用户回答回答于

正如Pointy说的那样,它只引用了arr2并且没有创建副本。

所以你需要添加

    arr2=new Array();

在循环的开始。

扫码关注云+社区

领取腾讯云代金券