In this plunk我有一个对象数组a
的示例,我将slice()
复制到b
。我改变了a
中的一个对象,但它也改变了b
。 Isn' t slice
是否应该复制数组,包括其内容?我需要a
和b
才能有不同的指针。
的Javascript
var a = [{x1:1, x2:2}, {x1:3, x2:4}];
var b = a.slice();
a[1].x1 = 5;
console.log(b[1]);
打印:
x1: 5
x2: 4
答案 0 :(得分:1)
来自MDN:
对于对象引用(而不是实际对象),slice复制对象 引用到新数组中。原始阵列和新阵列都参考 对同一个对象。 如果引用的对象发生更改,则更改为 对新的和原始数组都可见。
对于字符串,数字和 布尔值(不是String,Number和Boolean对象),slice复制 值到新数组中。对字符串,数字或布尔值的更改 一个数组不会影响另一个数组。
对阵列中的对象执行深层复制很困难,但this answer建议了一种方法,只要您的阵列只包含JSON可序列化的内容:
var clonedArray = JSON.parse(JSON.stringify(originalArray));
答案 1 :(得分:1)
您可以尝试使用jQuery进行Deep copy:
var b = $.extend(true,{},a);
这会对所有变量进行正确的深层复制。