327 votes

Comment trier un tableau sans modifier le tableau d'origine ?

Supposons que je veuille une fonction de tri qui renvoie une copie triée du tableau entré. J'ai naïvement essayé ceci

function sort(arr) {
  return arr.sort();
}

et je l'ai testé avec ceci, qui montre que mon sort est en train de muter le tableau.

var a = [2,3,7,5,3,7,1,3,4];
sort(a);
alert(a);  //alerts "1,2,3,3,3,4,5,7,7"

J'ai également essayé cette approche

function sort(arr) {
  return Array.prototype.sort(arr);
}

mais ça ne fonctionne pas du tout.

Existe-t-il un moyen simple de contourner ce problème, de préférence un moyen qui ne nécessite pas de faire tourner à la main mon propre algorithme de tri ou de copier chaque élément du tableau dans un nouveau tableau ?

3voto

Hamada Points 39

Ceux qui veulent faire une copie profonde (par exemple si votre tableau contient des objets) peuvent utiliser :

let arrCopy = JSON.parse(JSON.stringify(arr))

Ensuite, vous pouvez trier arrCopy sans changer arr .

arrCopy.sort((obj1, obj2) => obj1.id > obj2.id)

Veuillez noter que cette procédure peut être lente pour les très grands tableaux.

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