0

我从 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;
});

有人会碰巧知道为什么吗?

4

2 回答 2

1

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

您需要做的就是所谓的深拷贝。

一旦您指定jquery了标签 - 这是一个示例:

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

参考:

PS:举个简单的例子:

这就是你基本上所做的:

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

即使你有 2 个变量 - 它们指的是同一个对象。

于 2013-11-08T00:21:11.677 回答
1

我同意,扩展是你想要的。如果您使用数组 - 您可以使用 slice。

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

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

这是一个很好的参考: 如何正确克隆 JavaScript 对象?

于 2013-11-08T00:29:45.497 回答