Javascript - 修改数组副本而不修改原始数组

时间:2014-12-18 18:50:44

标签: javascript

我确定这是一个愚蠢的事情,但我无法解决它。

如果我这样做:

var arr = [1, 2, 3, "up"];
var duplicate = arr;
duplicate[3] = "down";
console.log(arr[3]); //"down"
console.log(duplicate[3]); //"down"

那么为什么原始数组也被修改了?它与它们指向同一个数组的事实有关吗?

如何仅修改副本?

2 个答案:

答案 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?