var old = { 'a':3, 'b': 5 }
var new = { 'a': 999, 'c': 10 }
comment puis-je ajouter le « nouveau » au « vieux » et le résultat dans:Comment ajouter un objet javascript à un objet javascript existant?
{ 'a': 999, 'b': 5, 'c': 10 }
var old = { 'a':3, 'b': 5 }
var new = { 'a': 999, 'c': 10 }
comment puis-je ajouter le « nouveau » au « vieux » et le résultat dans:Comment ajouter un objet javascript à un objet javascript existant?
{ 'a': 999, 'b': 5, 'c': 10 }
var o = { 'a':3, 'b': 5 };
var n = { 'a': 999, 'c': 10 };
for (var key in n){
o[key]=n[key];
}
Si vous utilisez un cadre plus une fonction qui va le faire, par exemple jQuery de étendre. Sinon, si vous utilisez JavaScript sans framework, vous devrez le faire vous-même.
Vous pouvez le faire en utilisant une boucle for ... in. En guise de remarque, n'appelez pas "vars" "nouveau" son mot-clé dans plus de quelques langues. Np si c'est juste pour l'exemple. Je l'ai renommé dans mon exemple de new à newObject sur les suggestions des commentaires.
PSTS droit, nécessaire pour vérifier dans le ... dans la boucle du var était en fait nouvelle de
+1 pour se souvenir de 'hasOwnProperty()', mais ne serait-il pas plus simple de faire l'assignation dans le 'if' au lieu de continuer quand la propriété n'est pas trouvée? – nnnnnn
Serait en effet plus simple, mais ce n'est pas beaucoup plus complexe, de cette façon a l'avantage supplémentaire d'être plus facile à étendre, par exemple. si la fusion d'objet en profondeur (fusionner les propriétés de sous-objet à la place de l'écrasement total) était requise. En l'état, il serait légèrement mieux lu avec l'instruction if inversée et entourant l'assignation. –
Il est vrai qu'il faut un peu de style ... Je préfère une approche de flux unique, donc j'utiliserais l'inversion de ce qui précède. Cependant, le * ci-dessus entraînera des erreurs de syntaxe * car 'new' est considéré comme un mot réservé et empêchera l'analyse correcte. Accordé que c'était un mauvais choix dans le message initial - peut-être envisager de le renommer et ajouter une note pour les lecteurs à venir :) –
jQuery fournir un meilleur appel de fonction .extend de $. Par exemple:
var old_obj = {'a': 3, 'b': 5};
var new_obj = {'a': 999, 'c': 10};
var result = $.extend(old_obj, new_obj);
Le résultat sera
{a: 999, b: 5, c: 10}
Cela devrait utiliser 'hasOwnProperty' pour éviter la copie sur trop. Alternativement, il existe déjà des fonctions existantes à partir d'un certain nombre de bibliothèques pour aider ... pourrait être utile d'en mentionner un ou deux. –
il veut un remplacement cependant - donc vérifier hasOwnProperty ne suffit pas - il devrait vérifier la valeur ainsi –