将对象属性复制到新对象并删除新对象(不是通过引用)

时间:2013-01-26 17:49:58

标签: javascript jquery

我有一个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 ;

};

2 个答案:

答案 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]);
}