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参照、正規表現オブジェクト、循環参照などが含まれていない場合)、クローンを作成する最も簡単な方法は次のとおりです。

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 に答える