4 votes

Le javascript Array.slice(0) renvoie-t-il une copie superficielle ?

IIUC Array.slice(0) renvoie une copie du tableau. S'agit-il d'une copie superficielle ? En d'autres termes, les éléments du tableau ont toujours le même emplacement en mémoire, mais le conteneur du tableau s'en voit attribuer un nouveau ?

De manière efficace :

let oldArray = ['old', 'array'];
let newArray = oldarray.slice(0);
let same = oldArray[0] === newArray[0]; //true 
let same = oldArray === newArray; //false

5voto

xianshenglu Points 3041

Oui, voir la démonstration :

var o = [{
  x: 1
}]
var o2 = o.slice(0)
o2[0].x = 2
console.log(o[0].x)

2voto

Zze Points 8878

Vous avez raison - il s'agit d'une copie superficielle.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice

La méthode slice() renvoie un copie superficielle d'une partie d'un tableau dans un nouvel objet de tableau sélectionné du début à la fin (la fin n'est pas incluse). Le tableau original ne sera pas modifié.

Si vous souhaitez une copie en profondeur, vous pouvez utiliser la bonne vieille méthode de la saleté :

var arr = [1]; 
var arr2 = JSON.parse(JSON.stringify(arr));

arr[0] = 99;
arr2[0] = 1000;

console.log({arr, arr2});

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