我从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;
});
有人会碰巧知道为什么?
答案 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);