Tri de tableau d'objet javascript

Tags:: développement :: web :: javascript :: mootools

Javascript est riche de méthodes en tout genre qui parfois nous laisse perplexe quant à ses possibilités. Notamment, ma dernière découverte en date, est le tri de tableau. Mais pas n'importe quel tableau: les tableaux d'objets.

En effet, un tri de tableau simple se fait de cette manière:


var a = [4,6,7,2,10,1];
a.sort();
 

Mais voilà, j'ai un tableau d'objet et j'ai besoin de le classer selon une propriété particulière, regardons ce tableau:


var a = [
    {x:1, y:2, z:5},
    {x:4, y:6, z:2},
    {x:2, y:3, z:10},
    {x:6, y:1, z:3}
];
 

Si j'ai envie de reclasser mes objets selon "z", je vais devoir boucler dans mes valeurs et reclasser selon des algos bien particulier (tri à bulles, tri récursif...). Or javascript ne me permettra pas d'avoir la vitesse dont j'ai besoin sachant que la fonction "sort" exécutée par le moteur javascript en natif...

Et bien en fait, il y a plus optimal, plus simple et plus rapide ! Il suffit de donner en paramètre une fonction de tri qui prend 2 argument. Ces arguments seront en fait les éléments d'index "i" et "i+1"... Il nous suffit de retourner une valeur booléenne, ou un entier positif ou négatif. Pour notre exemple, voici la fonction:


function sortByZ(a,b){
    return b.z - a.z;
}
 

De ce fait, pour utiliser notre tri d'objets:


var a = [
    {x:1, y:2, z:5},
    {x:4, y:6, z:2},
    {x:2, y:3, z:10},
    {x:6, y:1, z:3}
];

function sortByZ(a,b){
    return b.z - a.z;
}
a.sort(sortByZ);
 

La fonction sortByZ est envoyée par référence (car tout est objet en javascript). Mais vous pouvez tout aussi bien la passer anonymement:


var a = [
    {x:1, y:2, z:5},
    {x:4, y:6, z:2},
    {x:2, y:3, z:10},
    {x:6, y:1, z:3}
];

a.sort(function (a,b){
    return b.z - a.z;
});

 

Du coup, plus de déclaration, simplement la définition du tri à donner! Vous imaginez bien évidemment que la fonction peut être encore plus complexe... Le résultat est une vitesse d'exécution très appréciable et surtout une somme de code à taper en moins. Seule la comparaison doit être définie.

En espérant que cela vous serve !

Utilisez le code barre pour ouvrir le ticket dans votre mobile:
This ticket on you mobile
1 Mercredi 17 Février 2010 01:54:24, Belo

Un grand merci.
Je n'avais rien trouvé dans le O'REILLY à ce sujet.

2 Mercredi 05 Mai 2010 11:42:33, loic

MILLE MILLIARDS DE MILLE MERCIS

Ton billet a sauvé ma journée !!!

Loic
www.loicaigon.com
www.scriptopedia.org

Ajouter un commentaire
Veuillez répondre à la question suivante : Combien font un et deux, indiquez la réponse en chiifre

Trackbacks

Pour ajouter un trackback (retrolien) sur ce ticket, utilisez cette adresse: http://www.metal3d.org/index.php/trackback/default/tb?id=blog%2F190

Tags

Blog Copix Communication PC Config Fedora Vidéo Humour Autre Web Materiel Informatique PHP Développement Mootools HTML Linux WEB IE CSS Vista Microsoft Sympa XHTML Quizz Widget Klik CWE Voeux Bonne année Musique CCRMA Son Audio MAO Reconnaissance vocale Windows Mac Compiz MacOS Mysql Sun Base de données BD Screenlets Screenlet RPM compiz Ubuntu Live FireFox Derambarsh Facebook media informations Sécurité javascript SSH Commande Marketing concours ipod wii QT Trooltech Nokia Libre Logiciels GPL Attali Gnome Dock Compiler Bench undelete reiserfs recovery recover Thread Serveur Optimisation Server Apache Album RSS Flash Air XML Firefox Blender Opensource Orange Internet LiveBox Animaux Droits Logiciels Libres Google Loi RBS netcat Bash Téléphone Spam 3D NIDIA Standards Widgets Merise UML Streaming Developpement Perl MySQL Firewall Parfeu Bayes Novell Réseau Python LVS Salon FTP Dedibox Chrome Administration IRC Gentoo troll video Nouveauté Finance Etudiant spéctacle OpenOffice Javascript Java Info Eclpise ATI design mootools KDE Bureau Design GNU C Pages Jaunes Fun Bijoux Art mail Admin vmware fedora linux VirtualBox VMWare Qemu KVM vim Grep Fglrx Webkit GTK google web JQuery Coup de gueule coup de gueule Lois SVG Raycaster Canvas Hadopi Desktop Jeux Les Sims développement astuces Screen firefox Mobile Safaru Wine bash commande astuce Wave ooc C++ C# Netbook Hercules Bureautique Twitter Safari W3C chrome kazehakaze midori navigateur gecko webkit Links Liens Pyhon Nouvelles Metal Perso Conférence JDLL PCC Roadsend OOC News Acteur Cinéma Chanteur Seven windows orthographe pcc php jdll Slide Application mysql Html twitter python screen curses SVN Android Gphone iPhone OpenGL MindMap Projet Javascrtip Ajax Guitare Tab Tablature JSON firebug Chromium Iphone Titanium music sound android ogg ogv streaming

  • twitter entries...
follow me on Twitter

Valid XHTML 1.0 Strict