2012-05-03 4 views
2

Voici une version trop simpliste de ce que j'essaie de faire.jquery profond remplacer

var usersChoice; 
var object1 = {name: 'fu', id:'123', infoArray: [1,2,3,4,5]}; 
var object2 = {name: 'bar', id:'456', infoArray: [9,8]}; 

jQuery.extend(true, usersChoice, object1); 

Ensuite, si je veux changer mon esprit

jQuery.extend(true, usersChoice, object2); 

Le résultat:

usersChoice = {name: 'bar', id:'456', infoArray: [9,8,***3,4,5***]}; 

Ce que je veux est l'ancien objet à être totalement remplacé par le nouveau. Même juste une fonction d'effacement profonde que je pourrais appeler juste avant d'étendre comme ...

userChoice.nukeItFromOrbit(); 

Pour mémoire, j'ai essayé juste userChoice = nouvel objet ou non la copie, mais simplement en montrant les objets originaux. Les deux solutions ont une fâcheuse tendance à sortir du champ de vision à un moment donné de la ligne. (certains de ces objets sont transmis en tant que 'ceci' je soupçonne que c'est le coupable)

Alors, comment puis-je faire cela sans réinventer la roue de copie profonde? J'ai regardé partout et tout ce que j'ai trouvé est de réinventer la roue ou d'être dit que ce n'est pas une raison pour laquelle je devrais faire ce que je fais. =/

+0

Vous voulez fusionner everthing sauf tableaux? ou si object2 manquait le nom si le résultat final manquait le nom? (aussi, donnez-moi un cas d'utilisation pour cela, car je suis dans le camp de ne jamais avoir besoin de faire cela) –

+0

la question n'est pas claire, vous voulez deepExtend ou vous ne voulez pas étendre en profondeur? – Abid

+0

@Abid Je veux deepReplace, l'ancien objet à nuked de toutes les données et le nouveau mis en. –

Répondre

1

hmm, j'espère que je ne manque quelque chose (si me laisser un commentaire s'il vous plaît), mais pourquoi ne pas simplement un objet étends vide

usersChoice = jQuery.extend(true, {}, object2); 
+0

Honnêtement, je ne sais pas pourquoi votre solution ne fonctionne pas. 'usersChoice = jQuery.extend (true, {}, object2);' fonctionne dans la portée de la sous-fonction dans laquelle il se trouve, mais le changement n'affecte pas userChoice en dehors de 'jQuery.extend (true, usersChoice, object2);' l'affecte en dehors de la portée, mais avec les limitations que j'ai mentionnées. –

+0

Eh bien, cela nécessite quelques exemples de code ennemi l'utilisation que je suppose alors (pour tester les réponses contre). – Meligy