Angularjs объединяет два объекта

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

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
}

3 ответов


скопировать

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+
  • глубину (рекурсивно) копия

если вы не хотите перезаписывать null, вы можете использовать этой.



для более новых версий (по крайней мере 1.4.0) angular вы можете использовать angular.merge

В отличие от extend (), merge () рекурсивно опускается в свойства объекта исходных объектов, выполняя глубокую копию.


использование angualr.продлить не дадут требуемого результата. На объект2.значение age null переопределит object1.возрастное значение.

угловое.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
}