#17722

JavaScript Clone Array

(je_rale_contre_JS pour la 25436e fois)

Comment dupliquer un tableau en JS.

Ça ?

var new_table = old_table

Nope, car si on modifie old_table, alors le new_table s’en trouvera également modifié : ce n’est pas une duplication de la variable mais une référence à l’ancien tableau : c’est comme si les mêmes données sont accessibles sous deux noms.

Pour dupliquer un tableau à une seule dimension, il faut faire :

for (var i in table) {
    new_table[i] = table[i];
}

Mais si le tableau est un tableau d’objets, ou même un objet d’objets (donc de plus d’une dimension) ?
Ben la méthode précedente ne marche pas : si table[i] contient un objet, alors cet objet sera rendu accessible dans new_table[i], mais sans y être copié !

Modifier table[i] changera donc également new_table[i].

La seule méthode que j’ai trouvé (dans le lien) qui tienne en une ligne c’est ça :

var clone = JSON.parse( JSON.stringify( myArray ) );

On prend le tableau, on le transforme en une représentation textuelle JSON (à ce stade c’est juste du texte, sans objets, références, indexes…) puis on le retransforme entièrement en tableau. Là il sera dupliqué totalement, même si le tableau fait 15 dimensions.

C’est farfelu, oui.

https://davidwalsh.name/javascript-clone-array