繁体   English   中英

在Javascript中将数组推送到多维数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM