229 votes

Comment dupliquer les propriétés d'un objet dans un autre objet?

Étant donné l'objet:

 var firstObject = {
    key1 : 'value1',
    key2 : 'value2'
};
 

Comment puis-je copier les propriétés dans un autre objet ( secondObject ) comme ceci:

 var secondObject = {
    key1 : 'value1',
    key2 : 'value2',
    key3 : 'value3',
    key4 : 'value4'
};
 

en utilisant une référence au firstObject ? Quelque chose comme ça:

 var secondObject = {
    firstObject,
    key3 : 'value3',
    key4 : 'value4'
};
 

(ça ne marche pas ... je le mets juste pour montrer en grandes lignes comment j'aimerais structurer le code).

Une solution est-elle possible sans utiliser de framework JavaScript?

239voto

for(var k in firstObject) secondObject[k]=firstObject[k];

95voto

Ben Lee Points 25935

Parcourez les propriétés du premier objet et affectez-les au second, comme suit:

 var firstObject = {
    key1 : 'value1',
    key2 : 'value2'
};

var secondObject = {
    key3 : 'value3',
    key4 : 'value4'
};

for (var prop in firstObject) {
    if (firstObject.hasOwnProperty(prop)) {
        secondObject[prop] = firstObject[prop];
    }
}
 

La boucle for - in ne suffit pas; vous avez besoin de hasOwnProperty . Voir http://bonsaiden.github.com/JavaScript-Garden/#object.forinloop pour une explication détaillée de pourquoi.

12voto

Nijikokun Points 381

Pour que les gens puissent trouver une méthode de copie complète avec hasOwnProperty et la vérification d'objet réelle:

 var extend = function (original, context, key) {
  for (key in context)
    if (context.hasOwnProperty(key))
      if (Object.prototype.toString.call(context[key]) === '[object Object]')
        original[key] = extend(original[key] || {}, context[key]);
      else
        original[key] = context[key];
  return original;
};
 

4voto

KooiInc Points 38845

Cela devrait fonctionner, testé ici .

 var secondObject = {
    firstObject: JSON.parse(JSON.stringify(firstObject)),
    key3 : 'value3',
    key4 : 'value4'
};
 

Remarque : ceci ne copie pas les méthodes de firstObject
Remarque 2 : pour une utilisation dans les anciens navigateurs, vous aurez besoin d'un analyseur syntaxique json.
Remarque 3 : l'affectation par référence est une option viable, en particulier si firstObject contient des méthodes. Ajusté l'exemple donné jsfiddle en conséquence

3voto

William Points 7664

Malheureusement, vous ne pouvez pas faire référence à une variable dans un objet comme celui-ci. Cependant, vous pouvez créer une fonction qui copie les valeurs de l'objet dans un autre objet.

 function extend( obj1, obj2 ) {
    for ( var i in obj2 ) {
        obj1[i] = obj2[i];
    }
    return obj1;
}

var firstObject = {
    key1: "value1",
    key2: "value2"
};

var secondObject = extend({
    key3: "value3",
    key4: "value4"
}, firstObject );
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X