我有一个Javascript对象数组,用一些值初始化。 我想将这些值复制到新的对象数组,但不引用原始对象。 然后我想按照自己的意愿操纵新对象。
我在此示例代码中尝试了objectOptions.concat()
,但它删除了引用的原始对象:
var objectOptions = [{option1: 'value1', someOption: 'value2'}];
function objectClean(){
var newObjectOptions = objectOptions.concat();
for(var i in newObjectOptions )
{
delete newObjectOptions[i]['someOption'];
}
return newObjectOptions ;
};
答案 0 :(得分:3)
如果你的对象足够简单并且JSON-compatible(即,只包含对象,数组和基元,没有DOM引用,没有正则表达式对象,没有循环引用等),最简单的克隆方法是:
var clone = JSON.parse(JSON.stringify(original));
否则,您需要一个深层复制功能,例如在this answer上找到的功能*:
function clone(obj){
if(obj == null || typeof(obj) != 'object')
return obj;
var temp = obj.constructor(); // changed
for(var key in obj)
temp[key] = clone(obj[key]);
return temp;
}
*小心!该问题的公认答案是仅限jQuery的解决方案,并且非常高估!
答案 1 :(得分:1)
var copyme = {/*object with properties which are to be copied in another object*/};
var copy = {};
for (var attr in copyme) {
if (copyme.hasOwnProperty(attr)) copy[attr] = clone(copyme[attr]);
}