javascript - array - angular merge vs extend
Angularjs fusionan dos objetos (3)
Por ejemplo, a partir de estos dos objetos:
var object1 = {
"color": "yellow",
"size": null,
"age": 7,
"weight": null
}
var object2 = {
"color": "blue",
"size": 51,
"age": null
}
Quiero esto ( object2
anula object1
excepto por propiedades null
o propiedades que no tiene):
{
"color": "blue",
"size": 51,
"age": 7,
"weight": null
}
El uso de angualr.extend no producirá el resultado solicitado. El valor nulo object2.age anulará el valor de object1.age.
angular.extend (object1, object2) producirá el siguiente resultado:
{
"color" : "blue",
"size" : 51,
"age" : null, <=== undesirable result
"weight" : null
}
Use el siguiente código para omitir las propiedades nulas
for (var prop in object1) {
if(object1.hasOwnProperty(prop) && object2.hasOwnProperty(prop) && object2[prop]!=null) {
object1[prop] = object2[prop];
}
}
Esto producirá el siguiente resultado solicitado
{
"color" : "blue",
"size" : 51,
"age" : 7,
"weight" : null
}
Para Angular 1.x
var mergedObject = angular.extend(object1, object2);
Fuente:
https://docs.angularjs.org/api/ng/function/angular.extend
Para angular 1.4+ puede usar merge :
angular.merge(dst, src);
Si no desea sobrescribir con nulo, puede usar esto .
Para Angular 2 (ECMAScript 6):
puedes usar Object.assign () :
let movie2 = Object.assign({}, movie1, { episode: 8 });
Para versiones más nuevas (al menos 1.4.0) de angular, puede usar angular.merge
A diferencia de extend (), merge () desciende recursivamente en las propiedades de los objetos fuente, realizando una copia profunda.