在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());