Je veux diviser mon tableau en deux et enregistrer les résultats de celui-ci dans un autre tableau, mais sans affecter l'original.

Donc, si j'avais [1,3,9,5], je voudrais l'enregistrer dans une variable. Ensuite, je créais un nouveau tableau et copiais celui initial. Ensuite, je diviserais ce nouveau tableau en deux.

Ce qui signifie à la fin j'aurais 2 tableaux comme celui-ci

initial [1,3,9,5]
halved [1,3]

Le problème est que celui initial est également divisé et j'obtiens 2 tableaux avec chacun contenant la moitié des valeurs.

var initial = [1,3,9,5];

var half = initial;

half = half.splice(0, Math.floor(half.length / 2));

console.log(initial);
console.log(half);
2
Paran0a 8 mars 2016 à 17:38

4 réponses

Meilleure réponse
var half = initial;

Copie la référence de initial dans half. Ils sont le même tableau.

Soit copiez les valeurs du tableau avec var half = initial.slice();, soit obtenez immédiatement la moitié avec

var initial = [1, 3, 9, 5];
var half = initial.slice(0, Math.floor(initial.length / 2));
1
user4642212 8 mars 2016 à 14:42

Vérifiez les points suivants:

Option 1 Création d'une copie du tableau initial

var initial = [1,3,9,5];

var half = [].concat(initial);

half = half.splice(0, Math.floor(half.length / 2));

console.log(initial);
console.log(half);

Le [].concat(initial) permet de créer une copie du tableau initial.

Option 2 Ne modifiez pas le tableau initial, mais utilisez la méthode slice

var initial = [1,3,9,5];

var half = initial.slice(0, Math.floor(half.length / 2));

console.log(initial);
console.log(half);
1
Dmitri Pavlutin 8 mars 2016 à 14:51

Lorsque vous faites var half = initial; vous ne passez qu'une référence, pas copiez un tableau. Vous devez utiliser une autre méthode pour copier un tableau, par exemple:

var half = initial.slice();
0
jdabrowski 8 mars 2016 à 14:39

Vous pouvez le faire comme ça

var initial = [1,3,9,5];

var half = initial.slice(0, Math.floor(initial.length / 2));

console.log(initial); 
console.log(half);  
1
The Process 8 mars 2016 à 14:50