Splice不会复制对象数组

时间:2017-01-22 03:16:23

标签: javascript

In this plunk我有一个对象数组a的示例,我将slice()复制到b。我改变了a中的一个对象,但它也改变了b。 Isn' t slice是否应该复制数组,包括其内容?我需要ab才能有不同的指针。

的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

2 个答案:

答案 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);

这会对所有变量进行正确的深层复制。