我一直在绞尽脑汁想弄清楚为什么在我将一个分配给另一个后,这些阵列为什么要同步。输出应为“ 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);