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
}