如何合并对象?
How to merge objects?
例如,来自这两个对象:
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);
- 因为 angular 1.4+
- 深度(递归)复制
如果不想覆盖为null,可以使用this。
let movie2 = Object.assign({}, movie1, { episode: 8 });
- fot Angular 2+ (ECMAScript 6)
来源:
使用angualr.extend 不会产生请求的结果。 object2.age 空值将覆盖 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
}
对于 angular 的较新版本(至少 1.4.0),您可以使用 angular.merge
Unlike extend(), merge() recursively descends into object properties of source objects, performing a deep copy.
例如,来自这两个对象:
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);
- 因为 angular 1.4+
- 深度(递归)复制
如果不想覆盖为null,可以使用this。
let movie2 = Object.assign({}, movie1, { episode: 8 });
- fot Angular 2+ (ECMAScript 6)
来源:
使用angualr.extend 不会产生请求的结果。 object2.age 空值将覆盖 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
}
对于 angular 的较新版本(至少 1.4.0),您可以使用 angular.merge
Unlike extend(), merge() recursively descends into object properties of source objects, performing a deep copy.