web-dev-qa-db-fra.com

Comment fusionner des objets?

Par exemple, à partir de ces deux objets:

var object1 = {
  "color": "yellow",
  "size": null,
  "age": 7,
  "weight": null
}

var object2 = {
  "color": "blue",
  "size": 51,
  "age": null
}

Je veux ceci (object2 remplace object1 sauf null propriétés ou propriétés qu’il n’a pas):

{
  "color": "blue",
  "size": 51,
  "age": 7,
  "weight": null
}
34
TrtG

Copier

var src = { name: 'Apple', price: 5};
var dst= angular.copy(src);
  • copie profonde

Étendre:

var mergedObject = angular.extend(dst, src1, src2, ...) 
  • copie superficielle

Fusionner:

var mergedObject = angular.merge(dst, src);
  • depuis angular 1.4+
  • copie profonde (récursive)

Si vous ne voulez pas écraser avec null, vous pouvez utiliser this .


Object.assign ():

let movie2 = Object.assign({}, movie1, { episode: 8 });
  • fot Angular 2+ (ECMAScript 6)

Sources:

61
Beri

Pour les versions plus récentes (au moins 1.4.0) de angular, vous pouvez utiliser angular.merge

Contrairement à extend (), merge () descend récursivement dans les propriétés d'objet des objets source, en effectuant une copie complète.

18

L'utilisation de angualr.extend ne produira pas le résultat demandé. La valeur null object2.age remplacera la valeur object1.age.

angular.extend (object1, object2) produira le résultat suivant:

{
    "color" : "blue", 
    "size" : 51, 
    "age" : null,   <=== undesirable result
    "weight" : null
}

Utilisez le code suivant pour ignorer les propriétés null

for (var prop in object1) {
    if(object1.hasOwnProperty(prop) && object2.hasOwnProperty(prop) && object2[prop]!=null) {
        object1[prop] = object2[prop];
    }
}

Cela produira le résultat demandé suivant

{
    "color" : "blue", 
    "size" : 51, 
    "age" : 7, 
    "weight" : null
}
3
Saeed D.