我有一个Java对象数组,它使用一些值初始化。
我想将这些值复制到一个新的对象数组,但不参考原始对象。
然后,我想根据需要操纵新对象。

我像下面的示例代码一样尝试了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 ;

};

最佳答案

如果您的对象足够简单且JSON-compatible(即仅包含对象,数组和基元,没有DOM引用,没有Regex对象,没有循环引用等),则最简单的克隆方法是:

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的解决方案,而且被高估了!

关于javascript - 将对象属性复制到新对象并删除新对象(不通过引用),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14539746/

10-12 00:31
查看更多