我有一个结果集,它是一个对象数组。我需要克隆这个,这样我就可以对它进行更改,而不接触原始数据。
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
的变量,并将其设置为“Source Data”。
我希望能够对这个新的数据变量进行更改,但似乎在对其进行更改时,源数据正在更改(w2ui.grid.records
)。
有没有合适的方法来克隆这个集合,这样我就可以有一个新的数据示例来修改?
9条答案
按热度按时间vcirk6k61#
编辑
深度克隆使用
JSON.parse(JSON.stringify(arr));
浅克隆使用
slice(0);
6xfqseft2#
ES6:
如果你也想克隆对象,你必须展开数组和对象:
s8vozzvw3#
如果你使用的是jquery,你可以试试
extend
:6mw9ycah4#
Lodash有一个专门用于此的方法,称为
clonedeep
。如果你不想拉入整个库,有一个独立的包:https://www.npmjs.com/package/lodash.clonedeep
moiiocjp5#
这是因为数组是作为指针保存的,所以设置一个新变量只是指向同一个数组。
我知道的最简单的方法是用切片...
这将创建一个包含所有原始值的新数组,因为您是从第一个值(0)开始切片的。
如果你需要一个深度克隆,因为你的数组也包含对象/数组,试试这个...
https://github.com/pvorb/clone
yyhrrdl86#
下面的代码为我深克隆一个对象数组,其中没有存储任何函数。
9njqaruj7#
structuredClone
在JavaScript中深度复制对象数组的现代方法是使用structuredClone:
oo7oh9g98#
有很多种方法-
tjjdgumg9#
您可以通过ES6展开运算符实现此目的
同样的语法也可以用于javascript对象
var newObj = [...existingObj]