Comment faire pour copier/cloner un hachage/objet JQuery?
J'ai un objet simple (ou hash) en Javascript:
var settings = {
link: 'http://example.com',
photo: 'http://photos.com/me.jpg'
};
J'ai besoin d'une copie de celui-ci. Est-il un settings.clone()
type de méthode qui va me donner un autre objet avec les mêmes attributs? Je suis à l'aide de jQuery, heureux d'utiliser jQuery méthode utilitaire, s'il en existe un.
- double possible de Copie d'un Objet en Javascript
- À mon humble avis, ce devrait être renommé " Comment copier/cloner un hachage/objet jquery'. Ensuite, il serait de la dupliquer.
Vous devez vous connecter pour publier un commentaire.
Oui, étendre un objet vide avec l'original; de cette manière, tout simplement être copié:
S'étendant sur quelque objet rempli avec l'autre, par exemple:
sera de retour:
Avec la même logique:
sera de retour:
c'est à dire effectivement un clone.
extend(true, ...)
pour créer de la profondeur des copies.Non jQuery façon.
Cette copie uniquement les propriétés de haut niveau. Pour copier les hachages avec des objets imbriqués comme les valeurs de la propriété, vous aurez besoin d'utiliser une fonction récursive.
NB: La
Object.keys(settings)
évite la nécessité pour l'appelantsettings.hasOwnProperty(key)
.hasOwnProperty
serait un bon ajout. (+1 demain comme je l'ai atteint la limite de vote :))hasOwnProperty
n'est plus nécessaire.Défini en premier argument à true.
EDIT: Premier argument
true
signifie copie en profondeur. Pour l'exemple donné dans la question de départ, il n'est pas nécessaire pour la copie en profondeur puisqu'il y a simple immuable paires clé-valeur. Pour la question en titre - comme un cas général - utilisation de copie en profondeur. Sinon, vous obtenez la moitié de copie.true
si vous voulez une copie en profondeur.Il semble que vous voulez jQuery étendre, ce qui peut copier un objet pour vous.
http://api.jquery.com/jQuery.extend/
Underscore.js dispose également d'un étendre la fonction si vous n'êtes pas à l'aide de jQuery:
var new_obj = _.clone( old_obj );
Mes 2 cents:
Il est peut-être pas le plus optimisé option, mais il peut être pratique pour certains scénarios.
undefined
que la valeur