Lorsque vous copiez un tableau en JavaScript vers un autre tableau :
var arr1 = ['a','b','c'];
var arr2 = arr1;
arr2.push('d'); //Now, arr1 = ['a','b','c','d']
Je me suis rendu compte que arr2
fait référence au même tableau que arr1
, plutôt qu'à un nouveau tableau indépendant. Comment puis-je copier le tableau pour obtenir deux tableaux indépendants ?
Utilisez ça :
var newArray = oldArray.slice();
En gros, l'opération [slice()
][1] clone le tableau et renvoie une référence à un nouveau tableau.
Pour les références, les chaînes de caractères et les nombres (et non l'objet réel), slice()
copie les références de l'objet dans le nouveau tableau. L'original et le nouveau tableau font tous deux référence au même objet. Si un objet référencé change, les changements sont visibles à la fois dans le nouveau tableau et dans le tableau original.
Les primitives telles que les chaînes de caractères et les nombres sont immuables, de sorte que les modifications apportées à la chaîne de caractères ou au nombre sont impossibles.
[1] : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice
Pas besoin de jQuery... [Exemple de travail][1]
var arr2 = arr1.slice()
Ceci copie le tableau depuis la position de départ 0
jusqu'à la fin du tableau.
Il est important de noter que cela fonctionnera comme prévu pour les types primitifs (chaîne, nombre, etc.), et d'expliquer également le comportement attendu pour les types de référence...
Si vous avez un tableau de types de référence, disons de type Object
. Le tableau sera copié, mais les deux tableaux contiendront des références aux mêmes Objets
. Donc, dans ce cas, il semblerait que le tableau soit copié par référence, même si le tableau est réellement copié.
[1] :
Si vous voulez faire une nouvelle copie d'un objet ou d'un tableau, vous devez copier explicitement les propriétés de l'objet ou les éléments du tableau, par exemple :
var arr1 = ['a','b','c'];
var arr2 = [];
for (var i=0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
Vous pouvez rechercher sur Google de plus amples informations sur les valeurs primitives immuables et les références d'objets mutables.