たとえば、次の2つのオブジェクトから:
var object1 = {
"color": "yellow",
"size": null,
"age": 7,
"weight": null
}
var object2 = {
"color": "blue",
"size": 51,
"age": null
}
これ欲しい (object2
オーバーライドobject1
null
プロパティまたは彼が持たないプロパティを除く):
{
"color": "blue",
"size": 51,
"age": 7,
"weight": null
}
var src = { name: 'Apple', price: 5};
var dst= angular.copy(src);
拡張 (:
var mergedObject = angular.extend(dst, src1, src2, ...)
マージ:
var mergedObject = angular.merge(dst, src);
Nullで上書きしない場合は、 this を使用できます。
let movie2 = Object.assign({}, movie1, { episode: 8 });
ソース:
angularの新しいバージョン(少なくとも1.4.0)の場合、 angular.merge
Extend()とは異なり、merge()はソースオブジェクトのオブジェクトプロパティに再帰的に下降し、ディープコピーを実行します。
Angualr.extendを使用しても、要求された結果は生成されません。 object2.age null値は、object1.age値をオーバーライドします。
angular.extend(object1、object2)は、次の結果を生成します。
{
"color" : "blue",
"size" : 51,
"age" : null, <=== undesirable result
"weight" : null
}
次のコードを使用して、nullプロパティをスキップします
for (var prop in object1) {
if(object1.hasOwnProperty(prop) && object2.hasOwnProperty(prop) && object2[prop]!=null) {
object1[prop] = object2[prop];
}
}
これにより、次の要求結果が生成されます
{
"color" : "blue",
"size" : 51,
"age" : 7,
"weight" : null
}