克隆对象数组失败

时间:2013-11-08 00:16:23

标签: javascript jquery

我从MVC控制器中获取一些奇特的数据并将其与全局变量“data_Visits”对齐。然后,在聚会后期,我需要对“data_Visits”中的原始数据重复操作。

为了不更改“data_Visits”中的值,我想克隆它然后对克隆进行操作。但是,以下似乎改变了“data_Visits”中的值:

var data = data_Visits.slice(0);

data.forEach(function (d) {
    d.date = new Date(ToJavaScriptDate(d.date));
    d.result1 = +d.result1;
    d.result2 = +d.result2;
});

有人会碰巧知道为什么

2 个答案:

答案 0 :(得分:1)

因为您正在复制引用数组。您需要专门克隆每个数组条目,否则两个数组都将包含对同一对象的不同引用集合。

您需要做的事情称为深层复制。

只要您指定了jquery标记 - 这是一个示例:

var data = $.extend(true, [], data_Visits);

参考文献:

PS:作为一个简单的例子:

这是你基本上做的事情:

var a = { foo: 'bar' };
var b = a;

即使你有2个变量 - 它们也引用同一个对象。

答案 1 :(得分:1)

我同意,延伸就是你想要的。如果使用数组 - 可以使用切片。

var d = {bob: 'yes'}
var b = jQuery.extend({}, d);

b.bob = 'no'
// shows b modified, d is not
console.log(b, d);

这是一个很好的参考: How do I correctly clone a JavaScript object?