array javascript angularjs merge javascript-objects extends

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 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.