copie profonde de javascript utilisant JSON
J'ai un problème avec javascript object(array) copie en profondeur. J'ai lu beaucoup de bonne façon de traiter avec elle. Et je sais aussi que jQuery a $.étendre l'API à ce problème. Mais ma question est: puis-je simplement en utilisant JSON stringify et méthode d'analyse pour résoudre ce problème?
Voici mon code:
function deepCopy(oldValue) {
var newValue
strValue = JSON.stringify(oldValue)
return newValue = JSON.parse(strValue)
}
var a = {
b: 'b',
c: [1,2,4],
d: null
}
copy = deepCopy(a)
console.log(a === copy) //false
console.log(a.c === copy.c) //false
PS: je l'ai connu que, si pas tous les objets sont sérialisables, mais la situation que je sais, c'est que lorsque l'objet contient une propriété qui est de la fonction. Toute autre situation ?
Pardonner mon mauvais anglais, et c'est agréable si vous pouvez le signaler.
source d'informationauteur user2666750
Vous devez vous connecter pour publier un commentaire.
Si votre objet est "petit" et contient exclusivement serializable propriétés, une simple propriétédeepcopy hack utilisant la sérialisation JSON devrait être OK. Mais, si votre objet est grand, vous pourriez rencontrer des problèmes. Et si elle contient unserializable propriétés, ceux vais aller manquant:
Rendements:
ce qui est assez Intéressant, un bon nombre de copie en profondeur les solutions dans C# sont similaires sérialisation/désérialisation des tours.
Additif: vous ne savez Pas ce que vous espérez en termes de comparer les objets après la copie. Mais, pour des objets complexes, en général, vous devez écrire votre propre
Compare()
et/ouEquals()
méthode pour une comparaison exacte.Également notable, ce genre de copie ne conserve pas les informations de type.
Vous pouvez le faire de cette façon, mais il est problématique pour certaines des raisons énumérées ci-dessus:
Je la question de la performance.
Avez-vous des non sérialisable propriétés?
Et le plus important: votre clone est absent type d'informations. En fonction de ce que vous faites, qui pourraient être importants. A l'implémenteur ajouter des méthodes pour le prototype original de vos objets? Ceux qui sont partis. Je ne suis pas sûr de ce que vous en perdrez.