我一直在绞尽脑汁想弄清楚为什么在我将一个分配给另一个后,这些阵列为什么要同步。输出应为“ 1、2、3、4”,但应为“ 5、6、7、8”。我是否需要以其他方式复制阵列?

var firstArray = [1, 2, 3, 4];
var secondArray = [5, 6, 7, 8];

for (i = 0; i < firstArray.length; i++) {
  var myTempArray = firstArray;
  myTempArray[i] = secondArray[i];
}
console.log("Result: " + firstArray);


预期产量:

Result: 1,2,3,4


实际输出:

Result: 5,6,7,8


如何在不更改第一个数组的情况下更改第二个数组?

最佳答案

数组是可变对象。因此,它们仅包含引用。您需要“复制”数组以进行复制,而不仅仅是像原始对象那样进行分配。要复制数组,有多种方法。最好的方法是:

myTempArray = firstArray.slice();


您正在做的是浅表副本:



另外,另一个大问题是,循环内有数组分配,这使myTempArray保持更改。您需要将其带出循环。您的最终代码应如下所示:



var firstArray = [1, 2, 3, 4];
var secondArray = [5, 6, 7, 8];

var myTempArray = firstArray.slice();
for (i = 0; i < firstArray.length; i++) {
  myTempArray[i] = secondArray[i];
}
console.log("Result: " + firstArray);

07-24 19:03