如何克隆 Javascript 对象数组?

新手上路,请多包涵

我有一个结果集,它是一个对象数组。我需要克隆它,这样我就可以在不触及原始数据的情况下对其进行更改。

 var data = w2ui.grid.records,
exclude = Array('recid', 'w2ui'); // Exclude these data points from the pivot
// Modify our tempData records to remove HTML
$.each(data, function(key, value) {
    $.each(value, function(_key, _value) {
        if(jQuery.inArray(_key, exclude) != -1) {
            delete data[key][_key];
        }else{
            data[key][_key] = $('<div>'+_value+'</div>').text(); // <div></div> for those which are simply strings.
        }
    });
});

在此示例中,我创建了一个名为 data 的变量并将其设置为我的“源数据”。

我希望能够对此新数据变量进行更改,但似乎在对其进行更改时,源数据正在更改( w2ui.grid.records )。

有没有一种正确的方法来克隆这个集合,这样我就可以有一个新的数据实例来修改?

原文由 SBB 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 304
2 个回答

编辑

深度克隆使用 JSON.parse(JSON.stringify(arr));

浅克隆使用 slice(0);

 var arr = [{'obj1':1}, {'obj2':2}];
var clone = arr.slice(0);
console.log(clone);
 var arr = [{'obj1':1}, {'obj2':2}]
var clone = JSON.parse(JSON.stringify(arr));
console.log(clone);

原文由 zer00ne 发布,翻译遵循 CC BY-SA 3.0 许可协议

ES6:

如果你也想拥有克隆对象,你必须传播数组和对象:

 const newArrayOfObjects = [
  ...originalArrayOfObject
].map(i => ({ ...i}));

原文由 Remownz 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题