103 votes

Comment copier une carte dans une carte en double ?

Comment cloner/copier une carte en JavaScript ?

Je sais comment cloner un tableau mais comment cloner/copier une carte ?

 var myArray = new Array(1, 2, 3);
var copy    = myArray.slice();
// now I can change myArray[0] = 5; & it wont affect copy array

// Can I just do the same for map?
var myMap = new ?? // in javascript is it called a map?
var myMap = {"1": 1, "2", 2};
var copy  = myMap.slice(); 

392voto

tswaters Points 29

Avec l'introduction de Maps en JavaScript, c'est assez simple étant donné que le constructeur accepte un itérable :

 var newMap = new Map(existingMap)

Documentation ici : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

14voto

rob Points 3743

Un moyen simple (pour faire une copie superficielle) consiste à copier chaque propriété de la carte source dans la carte cible :

 var newMap = {};
for (var i in myMap)
   newMap[i] = myMap[i];

REMARQUE : newMap[i] pourrait très bien être une référence au même objet que myMap[i]

10voto

C'est très simple de cloner une carte puisque ce dont vous parlez n'est qu'un objet. Il y a un Map dans ES6 que vous devriez rechercher, mais pour copier un objet, utilisez simplement Object.assign()

 let map = {"a": 1, "b": 2}
let copy = Object.assign({}, map);

Vous pouvez également utiliser cloneDeep() de Lodash

 let copy = cloneDeep(map);

6voto

Pastor Bones Points 3389

JQuery a une méthode pour étendre un objet (fusionner deux objets), mais cette méthode peut également être utilisée pour cloner un objet en fournissant un objet vide.

 // 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 jQuery .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X