例如,从这两个对象:
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
}
答案 0 :(得分:61)
<强> Copy 强>
var src = { name: 'Apple', price: 5};
var dst= angular.copy(src);
Extend :
var mergedObject = angular.extend(dst, src1, src2, ...)
<强> Merge 强>:
var mergedObject = angular.merge(dst, src);
如果您不想使用null覆盖,可以使用this。
<强> Object.assign() 强>:
let movie2 = Object.assign({}, movie1, { episode: 8 });
来源:
答案 1 :(得分:18)
对于角度较新的版本(至少1.4.0),您可以使用angular.merge
与extend()不同,merge()以递归方式下降到源对象的对象属性中,执行深层复制。
答案 2 :(得分:3)
使用angualr.extend不会产生请求的结果。 object2.age null值将覆盖object1.age值。
angular.extend(object1,object2)将产生以下结果:
{
"color" : "blue",
"size" : 51,
"age" : null, <=== undesirable result
"weight" : 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
}