Cloner un object en javascript

Le premier ci-dessous enregistre 0, puis enregistre 1. Comment stocker une copie de l’object, plutôt qu’une référence à celui-ci?

debug.log(vi.details.segment); vi.nextSegment = vi.details; vi.nextSegment.segment++; debug.log(vi.details.segment); 

Pour cloner un object dans jQuery:

 var vi.nextSegment = jQuery.extend({}, vi.details); 

NOTE: Ce qui précède est une copie superficielle: tout object ou tableau nested sera copié par référence, ce qui signifie que toute modification apscope à vi.nextSegment.obj[prop] sera reflétée dans vi.details.obj[prop] . Si vous voulez un object complètement nouveau et complètement séparé de l’original , vous devrez faire une copie profonde (passe true comme premier paramètre):

 var vi.nextSegment = jQuery.extend(true, {}, vi.details); 

Pour en savoir plus sur l’extension, voir ici.

Jetez un oeil à la publication: Quel est le moyen le plus efficace de cloner un object javascript

Selon la réponse de John Resig :

 // Shallow copy var newObject = jQuery.extend({}, oldObject); // Deep copy var newObject = jQuery.extend(true, {}, oldObject); 

Plus d’informations peuvent être trouvées dans la documentation de jQuery.

Cela a mieux fonctionné pour moi en clonant un object en utilisant jQuery “parseJSON ()” et “JSON.ssortingngify ()”

 $.ajax({ url: 'ajax/test.html', dataType: 'json', success: function(data) { var objY = $.parseJSON(JSON.ssortingngify(data)); var objX = $.parseJSON(JSON.ssortingngify(data)); } }); 

Cloner un object de données dans objX & objY est un object différent, vous n’avez pas à vous soucier du problème “par référence”

Gracias!

Une autre façon de cloner un object est

 newObj = JSON.parse(JSON.ssortingngify(oldObj)); 

Mais attention si elle contient des dates. JSON.parse retournera date.toSsortingng () au lieu de la date dans ce cas.

Voici comment je copie des éléments plusieurs fois:

D’abord j’ai un template:

 
First Name .. a lot of other data ... Last Name

Maintenant, le JavaScript:

 function add_another(){ jQuery(".form-template").clone().appendTo(".forms-container"); } 

Essayez Immutable.js :

Comme jQuery traite principalement des DOM Elements , il ne s’agit peut- être pas du bon outil pour le travail. Immutable.js est une bibliothèque de 56 kb (minified) créée par Facebook .

 // roughly implementing import Immutable from 'immutable' // const oldObj = { foo: 'bar', bar: 'baz' } // create a map from the oldObj and then convert it to JS Object const newObj = Immutable.Map(oldObj).toJS() 

De cette façon, vous auriez effectivement cloné newObj partir de oldObj . Fondamentalement, si vous ne possédez pas déjà une Map , nous devons d’abord créer une Map . Map est comme un blue-print lequel nous travaillons pour créer des copies .

Les références :

Accueil – Immuable

Docs – Docs immuables

GitHub – Immutable @ GitHub

Bonne chance.