Подтвердить что ты не робот

Как объединить объекты?

Например, из этих двух объектов:

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
}
4b9b3361

Ответ 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
}