0

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

2 回答 2

3

如果您的对象足够简单且与JSON 兼容(即,仅包含对象、数组和原语,没有 DOM 引用,没有 Regex 对象,没有循环引用等),最简单的克隆方法是:

var clone = JSON.parse(JSON.stringify(original));

否则,您将需要一个深拷贝功能,例如在此答案中找到的功能*:

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

于 2013-01-26T18:22:49.587 回答
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]);
}
于 2013-01-26T17:55:52.163 回答