私はselectedItem
オブジェクトをAngularに持っていて、他のオブジェクトと配列を含んでいます。JSオブジェクトとその中のすべての配列とオブジェクトをトラバースしてコピーと比較するには?
$scope.editableItem = JSON.parse(JSON.stringify($scope.selectedItem))
は、その後、私は入力にeditableItem
モデルを使用し、内部にいくつかの値を変更します。私は、JSONのトリックを使用して深いコピーを作成します。 selectedItem
は変更されません。その後、変更したすべての変更はPATCH
で送信しますが、変更されていないフィールドは送信しません。だから私はselectedItem
で同じであるすべてのフィールドからeditableItem
を取り除く必要があります。
これを効率的に行うにはどうすればよいですか?私はUnderscoreを使ってオブジェクトを再帰的にトラバースすることを考えていましたが、私がそれに取り組む前にそれが良い考え方であるかどうか本当に知りたいと思います。
また、おそらく、動的に追加された第2のオブジェクトのタッチフィールドのみを含む第3のオブジェクトを作成することもできますが、これにどう対処するかはわかりません。
EDITED: 私は答えが一般的で、最も複雑なオブジェクト構造が可能であると考えています。例えば、this questionからの回答は、オブジェクトが単純なフィールドしか持たないと仮定するか、または角度別のウォッチャーを各フィールドごとに明示的に設定する必要があると仮定して、ここでは適用できません。私はこれがあなたにそこにすべての方法を取得するとは思わない
function getUpdateObject(orig, current) {
varChanges = {};
for (var prop in orig) {
if (prop.indexOf("$") != 0 && orig[prop] !== current[prop]) {
varChanges[prop] = current[prop];
}
}
return varChanges ;
};
:
どのように配列の違いを表現したいですか?スパース配列(あなたはJSONに正しく変換できません)? – CherryDT
良い点。私は推測:違いがない場合は、配列を送信しないでください。違いがある場合は、変更されたアレイ全体を送信してください。したがって、配列全体は変更され、渡されるか、変更されず、渡されない値です。 – Senthe