2010-08-12 6 views
0

Scénario: - remplir object1 - la copie du contenu de object1 à Object2 - élément supprimer object1JS: objets liés

Résultat maintenant: - à la fois object1 et Object2 ont 1 élément supprimé ...?!

résultat Souhaité: - object1 devrait avoir 1 élément inférieur à object2

Le code:

var object1 = new Object(); 
object1['key_one'] = 'value_1'; 
object1['key_two'] = 'value_2'; 
object1['key_three'] = 'value_3'; 
object1['key_four'] = 'value_4'; 
var object2 = new Object(); 
object2 = object1; 
delete object1['key_three']; 

Qu'est-ce que je fais mal?

+0

Je ne vois aucune relation avec les tableaux multidimensionnels .. – mykhal

+0

Votre code ne correspond pas à votre explication. Je suppose que vous faites une copie superficielle, mais votre code ne copie pas du tout. – deinst

Répondre

0

Votre code n'effectue aucune copie. object2 est simplement un nouvel objet vide. Essayez ceci:

var object1 = { 
    key_one: "value_1", 
    key_two: "value_2", 
    key_three: "value_3", 
    key_four: "value_4" 
}; 
var object2 = {}; 
for (var prop in object1) { 
    object2[prop] = object1[prop]; 
} 
delete object1["key_three"]; 

maintenant object2 est une copie de object1, mais la suppression des propriétés de object1 n'affectera pas object2.

Espérons que cela a du sens.

+0

bcherry, tu as sauvé ma journée, ça marche! merci mille fois! règles de stackoverflow! – Ozcar

+0

@Ozcar: Marquer cette réponse comme correcte. Donnez à l'homme un représentant! – ajm

+0

@Ozcar: ne pas oublier d'utiliser 'hasOwnProperty'. –

0

Il ne me semble pas que object2 ait jamais reçu l'une des propriétés de object1. Vous êtes sur la bonne voie, mais vous devez les copier.

var object1 = new Object(); 
object1['key_one'] = 'value_1'; 
object1['key_two'] = 'value_2'; 
object1['key_three'] = 'value_3'; 
object1['key_four'] = 'value_4'; 

var object2 = new Object(); 
for(var i in object1){ 
    object2[i] = object1[i]; 
} 
delete object1['key_three']; 
Questions connexes