我一直绞尽脑汁试图弄清楚为什么这些阵列在我分配给另一个之后同步。输出应为" 1,2,3,4"但相反,它是" 5,6,7,8和#34;。我需要以不同方式复制数组吗?
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
如何更改第二个数组而不更改第一个数组?
答案 0 :(得分:3)
数组是可变对象。所以它们只包含引用。您需要“复制”一个数组才能制作副本,而不仅仅是像原始对象那样分配。要复制数组,有各种方法。一种最好的方法是:
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);