2011-07-22 4 views

Répondre

1
var o = { 'a':3, 'b': 5 }; 
var n = { 'a': 999, 'c': 10 }; 

for (var key in n){ 
    o[key]=n[key]; 
} 
+3

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

+0

il veut un remplacement cependant - donc vérifier hasOwnProperty ne suffit pas - il devrait vérifier la valeur ainsi –

5

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

+0

+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

+0

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

+0

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 :) –

4

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} 
Questions connexes