begin process at 2010 02 10 12:26:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > DESORGANISÉ UN TABLEAU : LA MÉTHODE SORT

DESORGANISÉ UN TABLEAU : LA MÉTHODE SORT


 Information sur la source

Note :
8,5 / 10 - par 4 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Tutoriaux Classé sous :mélanger, shuffle, array, sort, trier Niveau :Débutant Date de création :24/08/2005 Date de mise à jour :24/08/2005 21:41:03 Vu :9 198

Auteur : jesusonline

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note


 Description

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

  • 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();}
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 :)


 Historique

24 août 2005 21:41:03 :
-

 Sources du même auteur

IMPLÉMENTATION DU TYPE GUID AVEC MICROSOFT AJAX
Source avec Zip CHRONOMÈTRE MESURANT LA DURÉE D'UNE FONCTION
Source avec Zip Source avec une capture GADGET POUR VISTA : CPU GRAPH
FUNCTION.WAITFOR : ATTENDRE UNE CONDITION AVANT D'EXECUTER U...
FONCTION GETELEMENTSBYCLASS

 Sources de la même categorie

Source avec Zip FAIRE UN CV EN HTML VIA XML ET DU XSL par antour
CONVERTISSEUR FRANC EURO TEMPS RÉEL SANS CLIC °CELSIUS °FAHR... par harlock59
Source avec Zip Source avec une capture DIFFÉRENCES EN JAVASCRIPT [DJ] par bultez
Source avec Zip Source avec une capture TRAITEMENT IMMÉDIAT DU CSS [TIC] par bultez
Source avec Zip J[AVA]SCRIPT ET .DLL OU UTILISATION D'UNE ROUTINE ÉCRITE DAN... par bultez

 Sources en rapport avec celle ci

CHRONOMÉTRE EN JAVASCRIPT par simo5963
TRANSFORMER UN TABLEAU JAVASCRIPT EN UN TABLEAU HTML par pifou25
Source avec Zip TRI DE TABLEAUX HTML par coucou747
Source avec Zip DIVERSES FONCTIONS SIMPLES POUR LES TABLEAUX par Gorrk
CONTROLER LE NOMBRE DE CHECKBOX CLIQUEES par Samiby

Commentaires et avis

Commentaire de ze_fred le 25/08/2005 09:56:49

Un bon tutorial qui depasse le cadre du sort et permet de montrer à ceux qui ne le save pas comment étendre les classes de base du javascript sans forcement faire de la délégation.

Fred

Commentaire de zeratul67 le 25/08/2005 21:23:11

Simple, peu long, détaillé, très bonne source pour découvrir un peu plus le language :)
Félicitation

Commentaire de GhislainLavoie le 30/08/2005 01:50:06

Salut jesusonline,

Juste une petite précision concernant ta source.  Tu dis que la fonction n'est pas réutilisable lorsqu'elle est utilisé directement dans le sort().  Et c'est effectivement vrai sauf qu'il n'est pas nécessaire de mettre la fonction dans le sort.  Il sufit de l'appeler avec son nom.  Un exemple :

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

var tableau = new Array(0, 1, 2, 3, 4, 5);
// pour faire la copie
copie = new Array().concat(tableau)
// pour trier
tableau.sort(sortRandom);

alert(tableau);
alert(copie)


Donc le prototypage n'étaient pas nécessaire pour ne pas avoir a dupliquer la fonction.  C'était tout de même un bon exercice de ta part.

9/10

A+

Commentaire de tcherniatinsky le 21/12/2009 13:34:33

Il y a une erreur dans le tri.
En effet la fonction sort va prendre le premier élément et le comparer au second.
S'il est plus grand on le compare au troisième et ainsi de suite.
Or le résultat de la comparaison a une chance sur deux d'être négatif.
Ce qui fait que ce premier élément a une chance sur deux d'être en première position, une sur quatre d'être en deuxième position, une sur huit d'être en troisième position,1/16...
Une solution originale est de permuter les éléments du tableau en les choisissant au hasard.
On choisit deux nombres aléatoires compris entre 0 et la taille tu tableau-1
on permute les éléments du tableau correspondant à ces indices.
On fait tourner la onction un certain nombre de fois afin que tous les éléments aient pu être mélangés.
Une autre solution serait de piocher dans le tableau un élément dont l'indice est choisi au hasard et de le mettre à la fin d'un nouveau tableau; on l'enlève de notre tableau et on repioche un élément jusqu'à ce que le tableau soit vide.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

sort Array [ par Larwin ] Bonjour tout le monde. Je me casse la tête depuis une petit moment, j'explique le problème. genre en simplifiant pour mieux comprendre : blabla = fu passer 2 tableau en url en javascript [ par CODE MAN ] Bonjour,j'ai une fonction qui permet de récupérer les positionY et positionX de tout mes div. la fonction retourne un tableau contenant l'ID_DIV, posi code javascript qui marche sur IE mais pas sur FF [ par justmix ] bonjour je suis débutant en java script et je cherche une solution a ce Problème voila mon Code :la Partie qui marche pas c'est quand tu choisi une zo JS: double boucle et compatibilité... [ par Doluvic400 ] Bonjour, A force de travail j'ai élaborer (en piquant des bouts par ci par la) un script permettant d'avoir de joli couleurs sur les carrés de liste Creer des couples depuis un Array d'objets [ par yanomano ] Bonjour, Je suis eu peu débutant en Javascript et je bute un peu sur un script. J'ai un Array avec plusieurs objets du type : [{1:2,3,},{10:11,12}] je Comment ajouter un lien sur des images qui défilent? [ par magatha ] Bonjour, J'espère poser ma question dans le bon endroit. J'ai trouvé un script sympa de rotation d'images (mieux qu'un simple ), et je voudrez que JS: Mettre du code Html dans un Array ? [ par benjouk ] Bonjour, Après des recherches infructueuses dans l'aide de Dreamweaver et sur le web, je n'ai pas trouvé de réponse à mon interrogation, qui me par Recherche dans un tableau js [ par dridri ] Bonjour,Voila j'ai une question qui m'embète pas mal. Je voudrais savoir s'il était possible de faire une recherche dans un tableau js contenant des d PRoblème en javascript, jeu de pendu [ par Chihiro ] Voilà, j'ai un gros problème dans mon script qui ne marche pas, parce que je suis vraiment nulle en programmation... Est ce que quelqu'un pourrait y j


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales