克隆对象数组失败
Clone array of objects fails
>我从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 对象?
相关文章:
- 在数组中插入对象失败
- $q.all当输入数组中的一项不是promise时,Typescript检查器失败
- 断言错误:断言失败:坐标数组的长度应与步幅匹配
- ember dev fixes错误:“;断言失败:findAll的响应必须是数组,而不是未定义的“”;
- 去掉js可观察数组和复选框,选中绑定失败
- 在 ie8 中使用茉莉花比较数组失败
- 克隆对象数组失败
- Ember 断言失败:来自 findQuery 的响应必须是数组,而不是未定义
- 循环遍历 ArrayController 失败,因为它不是数组,即使控制器具有正确的数据模型也是如此
- 从数组获取非重复索引在 0 时失败
- 在 Javascript 中将带有空格的字符串数组转换为小写,然后在 Webkit 中搜索它们失败
- JavaScript 数组推送 Anon 函数失败
- Javascript 多维数组返回第一个值,然后失败
- 将数据数组传递给 $.ajax 失败
- ng-repeat失败,并显示一个对象数组
- 断言失败:#each 循环的值必须是数组余烬 js
- 在处理延迟数组时获取成功的延迟并忽略失败的延迟
- Javascript:forEach在一个就地数组上经常失败
- 将对象推入数组失败
- 在函数中破坏数组失败;let未被定义”;