首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数组第一个索引中的Javascript数组始终被覆盖

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

Stack Overflow用户
提问于 2018-10-22 02:53:25
回答 2查看 92关注 0票数 1

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

代码语言:javascript
复制
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++;
	}
}
代码语言:javascript
复制
<button onclick="test()">Click</button>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-22 08:19:22

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

代码语言:javascript
复制
arr1[0]=[...arr2];
arr1[counter]=[...arr2];

数组是一种引用类型,所以您总是引用基类,而不是将它的副本放在arr1中,而是放在对arr2的引用中。

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

您可以通过创建一个新的Array或更现代的.扩展运算符

票数 1
EN

Stack Overflow用户

发布于 2018-10-22 03:13:49

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

所以你需要

代码语言:javascript
复制
arr2=new Array();

在循环开始时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52918746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档