[英]Push an array to a multidimensional array in Javascript
我正在尝试获取一个数组inArray
,该数组随着for()
循环的每次迭代而变化,并将其推送到多维数组medArray
。 下面有两种不同的方法略有不同,一种实现了目标,而第二个输出medArray
使得其中包含三个数组,它们都等于inArray
的最后一次迭代。
我很困惑为什么这有效:
var inArray = [1, 2, 3];
var medArray = [];
for(i = 0; i < 3; i++){
inArray[i] += 1;
//The difference is this line below
var test = [inArray[0], inArray[1], inArray[2]];
medArray.push(test)
console.log(medArray);
}
但这不起作用:
var inArray = [1, 2, 3];
var medArray = [];
for(i = 0; i < 3; i++){
inArray[i] += 1;
//The difference is this line below
var test = inArray;
medArray.push(test)
console.log(medArray);
}
当我单独将test
的值分配为inArray
的单独值时,它可以工作,但是当我将两个数组分配为相等时,它不起作用。 怎么了?
第二个输出
medArray
使得其中包含三个数组,它们都等于inArray
的最后一次迭代。
实际上,第二个代码块将同一个数组推送到medArray
三次。 当您说temp = inArray
不会创建数组的副本时,它会创建对同一数组的另一个引用。 (因此,如果在循环之后,您要说medArray[0][0] = 10
您会发现medArray[1][0]
和medArray[2][0]
现在也都等于10
,因为medArray[0]
、 medArray[1]
和medArray[2]
都引用同一个数组。)
如果要复制inArray
数组,请使用数组.slice()
方法:
var temp = inArray.slice();
那么temp
将是一个与inArray
具有相同元素的新数组。 这就是你在第一个代码块中用test = [inArray[0], inArray[1], inArray[2]];
.
或者你可以省略temp
变量而只说:
medArray.push(inArray.slice());
( .slice()
也可用于仅复制数组的一部分,如果您带参数调用它,但不带参数调用它会复制整个数组。)
在上下文中:
var inArray = [1, 2, 3]; var medArray = []; for(var i = 0; i < 3; i++){ inArray[i] += 1; medArray.push(inArray.slice()); } console.log(medArray);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.