Desorganisé un tableau : la méthode sort

Contenu du snippet

J'avais besoin recemment de desorganiser un tableau.

Par exemple j'avais

var tableau = new Array(0, 1, 2, 3, 4, 5);

et je voulais une fonction qui me mélange les nombres. En gros que {0, 1, 2, 3, 4, 5} deviennent {4, 3, 5, 0, 2, 1}

Pour cela j'ai utilisé la méthode sort de l'objet Array. Cette méthode attend en paramètre une fonction qui elle prend en paramètre 2 elements, puis cette fonction doit retourner un nombre negatif si la premier paramètre est inferieur au 2eme, 0 s'ils sont égaux, et un nombre supérieur à 1 s'il le premier est supérieur au second.

regardons un exemple :

tableau.sort(
function(elmt1, elmt2)
{
if (elmt1 < elmt2)
return -1;
else if( elmt1 == elmt2)
return 0;
else
return 1;
}
)

Donc pour desorganiser le tableau il faut que je retourne soit -1 soit 1. Voici le code permettant de faire ca : return ((2 * Math.round(Math.random())) - 1)

Une fois integré dans la fonction cela donne

tableau.sort(function(elmt1, elmt2) { return ((2 * Math.round(Math.random())) - 1) });

Le problème c'est que cette fonction n'est pas réutilisable il vous faut faire un copier coller pour desorganisé le tableau :/

C'est pas bien grave, etendons l'objet Array et rajoutons lui la méthode sortRandom()

if (!Array.prototype.sortRandom)
Array.prototype.sortRandom = function() { this.sort(function(elmt1, elmt2) { return ((2 * Math.round(Math.random())) - 1) }); }

Placer ce bout de code au début de votre fichier js, et vous pouvez dorenavant faire

var tableau = new Array(0, 1, 2, 3, 4, 5);
tableau.sortRandom();

alert(tableau[0]); // me renverra au hasard un des 6 chiffres du dessus.

Un autre problème c'est que ma méthode sortRandom modifie le tableau d'origine, et moi je voudrais bien que cela me renvoie un nouveau tableau.

Donc déjà il nous faut une fonction qui permet la duplication d'un tableau, on procede de la meme facon que tout à l'heure, en etendant l'objet Array.

if (!Array.prototype.duplicate)
Array.prototype.duplicate = function() { return [].concat(this);}

maintenant ajoutons la méthode getRandomlySort

if (!Array.prototype.getRandomlySort)
Array.prototype.getRandomlySort= function() { return this.duplicate().sortRandom();}

Source / Exemple :


if (!Array.prototype.duplicate) 
    Array.prototype.duplicate = function() { return [].concat(this);}

if (!Array.prototype.sortRandom) 
    Array.prototype.sortRandom = function() { this.sort(function(elmt1, elmt2) { return ((2 * Math.round(Math.random())) - 1) }); }

if (!Array.prototype.getRandomlySort) 
    Array.prototype.getRandomlySort= function() { return this.duplicate().sortRandom();}

Conclusion :


J'ai fait ces fonctions pour vous montrer le fonctionnement de la méthode sort :)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.