我确定这是一个愚蠢的事情,但我无法解决它。
如果我这样做:
var arr = [1, 2, 3, "up"];
var duplicate = arr;
duplicate[3] = "down";
console.log(arr[3]); //"down"
console.log(duplicate[3]); //"down"
那么为什么原始数组也被修改了?它与它们指向同一个数组的事实有关吗?
如何仅修改副本?
答案 0 :(得分:3)
您需要克隆duplicate
数组...您可以使用slice()
方法执行此操作:
var arr = [1, 2, 3, "up"];
var duplicate = arr.slice(0);
duplicate[3] = "down";
console.log(arr[3]); //"up"
console.log(duplicate[3]); //"down"
答案 1 :(得分:1)
原始数组已修改,因为使用var duplicate = arr
只表示duplicate
的值现在等于arr
的值。更改任何一个都将更改数组的值。
至于复制数组及其内容,这篇文章有一个完整的注释How do I correctly clone a JavaScript object?