在Javascript中将数组推送到多维数组
我试图获取一个数组,在Javascript中将数组推送到多维数组,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我试图获取一个数组,inaray,它随着for()循环的每次迭代而变化,并将其推送到多维数组,medArray。下面有两种不同的方法略有不同,其中一种方法实现了目标,而第二种方法输出的是medArray,即其中有三个数组,它们都等于INARAY的最后一次迭代 我不明白为什么会这样: var inArray = [1, 2, 3]; var medArray = []; for(i = 0; i < 3; i++){ inArray[i] += 1; //The differ
inaray
,它随着for()
循环的每次迭代而变化,并将其推送到多维数组,medArray
。下面有两种不同的方法略有不同,其中一种方法实现了目标,而第二种方法输出的是medArray
,即其中有三个数组,它们都等于INARAY
的最后一次迭代
我不明白为什么会这样:
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=[];
对于(i=0;i<3;i++){
inArray[i]+=1;
//区别就在下面这一行
var测试=[inArray[0]、inArray[1]、inArray[2];
medArray.push(测试)
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);
}
var-inArray=[1,2,3];
var medArray=[];
对于(i=0;i<3;i++){
inArray[i]+=1;
//区别就在下面这一行
var检验=inArray;
medArray.push(测试)
console.log(medArray);
}
当我单独指定test
的值作为inaray
的单独值时,它起作用,但当我指定两个数组相等时,它不起作用。发生了什么事
第二个输出MEDARY
,这样is中有三个数组,它们都等于inArray
的最后一次迭代
实际上,第二个代码块将同一数组推送到medArray
三次。当您说temp=inArray
不创建数组副本时,它会创建对同一数组的另一个引用。(因此,如果在循环之后,你说MEDARRY[0][0]=10
,你会发现MEDARRY[1][0]
和MEDARRY[2][0]
现在都相等10
,因为MEDARRY[0]
,MEDARRY[1]
和MEDARRY[2]
都引用同一个数组。)
如果要制作inArray
阵列的副本,请使用:
然后,temp
将是一个新数组,它具有与inArray
相同的元素。这就是您在第一个代码块中使用test=[inArray[0]、inArray[1]、inArray[2]所做的代码>
或者您可以省略temp
变量,只需说:
medArray.push(inArray.slice());
(.slice()
也可用于仅复制数组的一部分,如果使用参数调用,但不使用参数调用,则会复制整个数组。)
在这方面:
var-inArray=[1,2,3];
var medArray=[];
对于(变量i=0;i<3;i++){
inArray[i]+=1;
medArray.push(inArray.slice());
}
console.log(medArray)代码>你是最伟大的!我已经为此挣扎了几个小时。
medArray.push(inArray.slice());