web-dev-qa-db-ja.com

1つのjavascriptオブジェクトを別のオブジェクトに置き換えます

ページの読み込み時に、objDemo1objDemo1Backupの2つのJavascriptオブジェクトを作成しています。後者は、最初のオブジェクトの正確なコピーです。

例えば.

objDemo1 { 
    sub_1 = { something: 123, somethingElse: 321 },
    sub_2 = { something: 456, somethingElse: 654 }
}

sub_の値を変更したり、新しいsub_を追加/削除したりできますが、編集しているオブジェクトはobjDemo1だけです。つまり、私はobjDemo1Backupを変更しません

クリックするとobjDemo1をページが最初に読み込まれたときの状態にリセットするリセットボタンがあります(つまり、objDemo1 = objDemo1Backup)。これは私が問題を抱えているところです。

objDemo1objDemo1Backupに設定するにはどうすればよいですか?

私が試してみました:

objDemo1 = objDemo1Backup;

そして

objDemo1 = null;
var objDemo1 = objDemo1Backup;

...同様のバリエーションもありますが、何も機能していないようです。何か案は?

  • 注:リセットの時点で、objDemo1Backupは作成したときとまったく同じであり、objDemo1が変更されていることを確認できます。
  • 私のコードは間違いなく「リセット」機能を実行しています。ここでobjDemo1 = objDemo1Backup...を試しました。オブジェクトを置き換える構文がわかりません。
12
Adam Tomat

JavaScriptでは、オブジェクトは値ではなく参照によって渡されます。そう:

var objDemo, objDemoBackup;
objDemo = {
    sub_1: "foo";
};
objDemoBackup = objDemo;
objDemo.sub_2 = "bar";
console.log(objDemoBackup.sub_2);   // "bar"

コピーを取得するには、コピー機能を使用する必要があります。 JavaScriptにはネイティブにはありませんが、ここにcloneの実装があります: JavaScriptオブジェクトを正しく複製するにはどうすればよいですか?

var objDemo, objDemoBackup;
objDemo = {
    sub_1: "foo";
};
objDemoBackup = clone(objDemo);
objDemo.sub_2 = "bar";
console.log(objDemoBackup.sub_2);   // undefined
7
Halcyon

angularjsを使用していますが、オブジェクトを別のオブジェクトにコピーする方法を見つけるのに少し時間がかかりました。通常、オブジェクトのクローンを取得するには、cloneを呼び出すか、ここでangularcopy

var targetObj = angular.copy(sourceObj);

これにより、ソースオブジェクトの新しいクローンインスタンス(新しい参照を含む)が得られます。しかし、ドキュメントをざっと見ると、copyの2番目のパラメーターがわかります。

angular.copy(sourceObj, targetObj)

このようにして、ソースのフィールドとメソッドでターゲットオブジェクトをオーバーライドできますおよびターゲットオブジェクトの参照も保持します。

13
schmijos

Object.assign

ObjectConstructor.assign(target: T, source: U): T & U

targetsourceの2つのパラメーターを取ります。関数が完了すると、targetオブジェクトのすべての内部にsource1が追加されます。

1
ivanjermakov