克隆对象数组失败

Clone array of objects fails

本文关键字:失败 数组 对象      更新时间:2023-09-26

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

有人碰巧知道为什么吗?

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

您需要做的称为深层副本。

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

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

引用:

  • http://api.jquery.com/jQuery.extend/

PS:举个简单的例子:

这是你基本上要做的:

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

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

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

var d = {bob: 'yes'}
var b = jQuery.extend({}, d);
b.bob = 'no'
// shows b modified, d is not
console.log(b, d);

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