Je recherche la meilleure façon d '"ajouter" plusieurs objets JavaScript (tableaux associatifs).
Par exemple, étant donné:
a = { "one" : 1, "two" : 2 };
b = { "three" : 3 };
c = { "four" : 4, "five" : 5 };
quelle est la meilleure façon de calculer:
{ "one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }
Réponses:
ECMAscript 6 introduit
Object.assign()
pour y parvenir nativement en Javascript.Documentation MDN sur Object.assign ()
Object.assign
est pris en charge dans de nombreux navigateurs modernes mais pas encore tous. Utilisez un transpilateur comme Babel et Traceur pour générer du JavaScript ES5 rétrocompatible.la source
Object.assign.apply({}, [{a: 1}, {b: 2}, ....])
Object.assign.apply
pour fusionner un tableau d'objets, consiste à utiliser à la place l'opérateur de propagation:Object.assign( ...objects )
Vous pouvez utiliser jquery
$.extend
comme ceci:la source
d = $.extend({},a,b,c);
Cela devrait le faire:
Production:
la source
length
recherche pas la taille du tableau à chaque appel? J'ai tellement l'habitude d'écrirefor (var i = 0, len = array.length; i < len; ++i)
que je ne me souviens pas du tout pourquoi j'ai commencé à le faire.ECMAScript 6 a une syntaxe étendue . Et maintenant vous pouvez faire ceci:
la source
Underscore a peu de méthodes pour faire cela;
1. _.extend (destination, * sources)
Copiez toutes les propriétés des objets source dans l' objet de destination et renvoyez l' objet de destination .
Ou
2. _.defaults (objet, * par défaut)
Remplissez les propriétés non définies dans object avec les valeurs des objets par défaut et renvoyez l' objet .
Ou
la source
Pourquoi la fonction devrait-elle être limitée à 3 arguments? Vérifiez également
hasOwnProperty
.la source
Le clonage superficiel (hors prototype) ou la fusion d'objets est désormais possible en utilisant une syntaxe plus courte que Object.assign () .
La syntaxe de propagation pour les littéraux d'objet a été introduite dans ECMAScript 2018 ):
L'opérateur Spread (...) est pris en charge dans de nombreux navigateurs modernes, mais pas tous.
Il est donc recommandé d'utiliser un transpilateur comme Babel pour convertir le code ECMAScript 2015+ en une version rétrocompatible de JavaScript dans les navigateurs ou environnements actuels et anciens.
Voici le code équivalent que Babel générera pour vous:
la source
Remarque: les propriétés existantes dans les objets précédents seront écrasées.
la source
a === d
la fin. Cela pourrait être correct et non.Il est facile d'utiliser l' opérateur de propagation ES7 pour un objet, dans la console de votre navigateur
la source
Pour fusionner un nombre dynamique d'objets, nous pouvons utiliser
Object.assign
avec la syntaxe de propagation .La fonction ci-dessus accepte n'importe quel nombre d'objets, fusionnant toutes leurs propriétés dans un nouvel objet avec les propriétés des objets ultérieurs remplaçant celles des objets précédents.
Démo:
Afficher l'extrait de code
Pour fusionner un tableau d'objets, une méthode similaire peut être appliquée.
Démo:
Afficher l'extrait de code
la source
Probablement, le moyen le plus rapide, efficace et plus générique est celui-ci (vous pouvez fusionner n'importe quel nombre d'objets et même copier dans le premier -> attribuer):
Il vous permet également de modifier le premier objet tel qu'il est passé par référence. Si vous ne le souhaitez pas mais souhaitez avoir un objet complètement nouveau contenant toutes les propriétés, vous pouvez passer {} comme premier argument.
combiné_object et object1 contiennent tous deux les propriétés de object1, object2, object3.
Dans ce cas, le combine_object contient les propriétés de object1, object2, object3 mais object1 n'est pas modifié.
Vérifiez ici: https://jsfiddle.net/ppwovxey/1/
Remarque: les objets JavaScript sont passés par référence.
la source
ES6 ++
La question est d'ajouter différents objets en un seul.
disons que vous avez un objet avec plusieurs clés qui sont des objets:
c'était la solution que j'ai trouvée (je dois encore foreach: /)
En faisant cela, nous pouvons ajouter dynamiquement TOUTES les clés d'objet en une seule.
la source
Le plus simple: les opérateurs de diffusion
la source
la source