Как объединить объекты?
Например, из этих двух объектов:
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
}
Ответы
Ответ 1
копия
var src = { name: 'Apple', price: 5};
var dst= angular.copy(src);
Расширить:
var mergedObject = angular.extend(dst, src1, src2, ...)
Слияние:
var mergedObject = angular.merge(dst, src);
- начиная с угловой 1. 4+
- глубокая (рекурсивная) копия
Если вы не хотите перезаписывать ноль, вы можете использовать это.
Object.assign():
let movie2 = Object.assign({}, movie1, { episode: 8 });
- для угловых 2+ (ECMAScript 6)
Источники:
Ответ 2
Для более новых версий (не менее 1.4.0) angular вы можете использовать angular.merge
В отличие от extend(), merge() рекурсивно спускается в свойства объекта исходных объектов, выполняя глубокую копию.
Ответ 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
}