Accueil > Forum > > > > tri d'un array multidimensionnel par colonne
tri d'un array multidimensionnel par colonne
mardi 7 août 2007 à 17:17:17 |
tri d'un array multidimensionnel par colonne

ludovicanceaux
|
Salut à tous, Comment peut t'on procéder pour
trier un tableau multidimensionnel (le mien n'a que 2 colonnes) par la
deuxième colonne par exemple. car en fait j'ai une fonction qui insère
récursivement, au chargement de la page, des données ex: add_array("http://www.dpm-motors.com/","ASTON MARTIN","Vanquish S","","Noir","12 000","Cuir noir","2005","08/09/2005","","220 000 EUR","Aston5859.JPG|Aston5859A.JPG|Aston5859B.JPG"); add_array("http://www.dpm-motors.com/","AUDI","A3 1,8 L Turbo Quattro","","Bleu","63 036","Cuir beige","2003","06/01/2003","PDC, CD, 5P.Ambiente","14 800 EUR","AUDIA5678.JPG");
function add_array(url_garage,marque,modele,categorie,couleur,kilometrage,interieur,millesime,immat,option,prix_ttc,photo){ var id=fiches_array.length; fiches_array[id]=new Array(); fiches_array[id][1]=marque; fiches_array[id][2]=modele; fiches_array[id][3]=categorie; fiches_array[id][4]=kilometrage; fiches_array[id][5]=couleur; fiches_array[id][6]=interieur; fiches_array[id][7]=option; fiches_array[id][8]=prix_ttc; fiches_array[id][9]=photo; fiches_array[id][10]=immat; }et
en fait je voudrais trier par marque ou bien par modele, j'ai essayé
fiches_array.sort();, ca me trie par rapport à la 1ère colonne, mais je
peux pas trier par rapport aux autres. Merci d'avance
|
|
mardi 7 août 2007 à 18:21:48 |
Re : tri d'un array multidimensionnel par colonne

the_wwt
|
Bonjour, implémente toi un petit tri à bulle et définit une fonction de comparaison qui prend deux objets. Cordialement, Pierrick
|
|
mardi 7 août 2007 à 18:56:40 |
Re : tri d'un array multidimensionnel par colonne

the_wwt
|
Je me suis rappelé que le tri a bulle n'est pas trop perfectionné, donc voici l'implémentation pour ton besoin avec un tri par fusion o(nlogn), Il te faut rajouter les autres propriétés de comparaison, Les fonctions de tri sont à peines tester alors si c'est pour de la prod, jettes y un coup d'oeil sérieux. Cordialement, Pierrick <----------------------------------------------------------------------------------------------------------------->
<html> <head> <title></title> <script language="javascript" type="text/javascript"> <!-- var fiches_array = [];
function add_array(url_garage,marque,modele,categorie,couleur,kilometrage,interieur,millesime,immat,option,prix_ttc,photo){ var id=fiches_array.length; fiches_array[id]=new Array(); fiches_array[id][1]=marque; fiches_array[id][2]=modele; fiches_array[id][3]=categorie; fiches_array[id][4]=kilometrage; fiches_array[id][5]=couleur; fiches_array[id][6]=interieur; fiches_array[id][7]=option; fiches_array[id][8]=prix_ttc; fiches_array[id][9]=photo; fiches_array[id][10]=immat; }
function compareObjet(o1, o2, sortColumn, sortOrder){ if( sortColumn == "modele"){ return sortOrder > 0 ? o1[2] < o2[2] : o1[2] > o2[2]; }else{ return sortOrder > 0 ? o1[1] < o2[1] : o1[1] > o2[1]; } }
function fusion(t, tmp, de1, vers1, de2, vers2, count, posInB, sortColumn, sortOrder) { for(var i = 0 ; i < count ; i++) { if(de2 > vers2) tmp[posInB++] = t[de1++]; else if(de1 > vers1) tmp[posInB++] = t[de2++]; else if(compareObjet(t[de1], t[de2], sortColumn, sortOrder)) tmp[posInB++] = t[de1++]; else tmp[posInB++] = t[de2++]; } return tmp; } function triFusion(t, sortColumn, sortOrder) { var tmp = []; var sortLength = 1, de1, de2, de3, i; while(sortLength < t.length) { de1 = 0; while(de1 < t.length) { de2 = de1 + sortLength; de3 = de2 + sortLength; if(de2>t.length) de2 = t.length; if(de3>t.length) de3 = t.length; tmp = fusion(t, tmp, de1, de2-1, de2, de3-1, de3-de1, de1, sortColumn, sortOrder); de1 = de3; } for(i = 0 ; i < t.length ; i++) t[i] = tmp[i]; sortLength *= 2; } return t; }
function afficher( s ){ s += "\n[\n"; for(var i = 0; i < fiches_array.length; i++){ s += " " + i + "={\n"; s+=" marque: " + fiches_array[i][1] + ",\n"; s+=" modele: " + fiches_array[i][2] + ",\n"; s += " }"; if(i < fiches_array.length - 1) s+=",\n"; } s += "\n]"; alert(s); }
add_array("http://www.dpm-motors.com/","ASTON MARTIN","Vanquish S","","Noir","12 000","Cuir noir","2005","08/09/2005","","220 000 EUR","Aston5859.JPG|Aston5859A.JPG|Aston5859B.JPG"); add_array("http://www.dpm-motors.com/","AUDI","A3 1,8 L Turbo Quattro","","Bleu","63 036","Cuir beige","2003","06/01/2003","PDC, CD, 5P.Ambiente","14 800 EUR","AUDIA5678.JPG");
//On lance le tri triFusion(fiches_array, "modele", 1); // Tri ascendant afficher("Tri ascendant modele"); triFusion(fiches_array, "modele", -1); // Tri descendant afficher("Tri descendant modele");
triFusion(fiches_array, "marque", 1); // Tri ascendant afficher("Tri ascendant marque"); triFusion(fiches_array, "marque", -1); // Tri descendant afficher("Tri descendant marque"); --> </script>
</head> <body> </body> </html>
|
|
mardi 7 août 2007 à 20:11:37 |
Re : tri d'un array multidimensionnel par colonne

ludovicanceaux
|
Salut à tous,
En effet c'est pour de la prod, je te remercie, je vais voir ca 2m1, une chose qui m'étonne c'est qu'on est obligé de faire une fonction, nous même, et que ca n'existe pas une toute prête comme sort(), qui existe déjà!!!!
Merci je vais regarder ca serieusement 2m1
|
|
mardi 7 août 2007 à 21:04:25 |
Re : tri d'un array multidimensionnel par colonne

the_wwt
|
Bonjour, une idée intérressante serait de proposer une source qui ajoute une méthode à la classe Array de tri qui prendrai une fonction de comparaison en paramètre. Du genre : Array.prototype.sortAs = function( compareFunction ){ //Une boucle de tri // Un test avec appel de la fonction de comparaison if( compareFunction( o1, o2) < 0 ) //Inversion ou fusion } Cordialement, Pierrick
|
|
mardi 7 août 2007 à 21:06:48 |
Re : tri d'un array multidimensionnel par colonne

the_wwt
|
A noter, J'ai rarement vu des tri en javascript coté client... La raison est simple, souvent le client n'a accès qu'à une portion de la collection pour cause de rapidité. Le tri est fait coté serveur, d'ailleurs souvent en SQL. Une solution sympas est le Rico Live Grid qui gère cela très bien en ajax en plus. Cordialement, Pierrick
|
|
mercredi 8 août 2007 à 01:03:17 |
Re : tri d'un array multidimensionnel par colonne

Arto_8000
|
the_wwt -> Tu veux dire quelque chose comme ça ?
["test","123","nmjj","free","!@","dddd"].sort(function (element1,element2){
if (element1 < element2)
{
return -1;
}
if (element1 == element2)
{
return 0;
}
if (element1 > element2)
{
return 1;
}
});
|
|
mercredi 8 août 2007 à 01:04:25 |
Re : tri d'un array multidimensionnel par colonne

ludovicanceaux
|
Salut à tous,
Bah en fait ce n'est pas possible de faire des requete SQL car c'est un site qui va réferencer 5 sites d'annonces automobiles différents j'ai donc crée 5 fichiers XML (sur chacun des sites) et donc là j'ai tout rappatrié dans mon tableau qui est en javascript, mais pour trier ma liste je n'ai pas de problème, en effet je me sert de DOM, par contre j'ai besoin de faire des champ (via le control select) ou je rappatrie mes marque dans le champ marque alphabetiquement et modele dans le champ modele alphabetiquement aussi...
Merci d'avance
|
|
mercredi 8 août 2007 à 09:33:27 |
Re : tri d'un array multidimensionnel par colonne

the_wwt
|
Bonjour, Arto_8000 -> Oui tout a fait, je ne pense pas qu'elle existe... me trompai-je? ludovicanceaux -> Bon et bien par sur cette solution en javascript... Je te fais le bout de code pour étendre la classe Array, si ça intéresse quelqu'un... Cordialement, Pierrick
|
|
mercredi 8 août 2007 à 09:54:59 |
Re : tri d'un array multidimensionnel par colonne

the_wwt
|
Re... Ok merci Arto_8000, je ne connaissai pas cette fonction... Bien voilà, tu as ta réponse ludovicanceaux. Cordialement,
|
|
Cette discussion est classée dans : colonne, id, array, jpg, fiches
Répondre à ce message
Sujets en rapport avec ce message
effet de survol sur une colonne [ par matt438 ]
salutj'ai pb de création javscript/cssje voudrais créer un effet de survol sur une colonne d'un tableau. je n'ai réussi qu'à le faire en appelant l'id
editeur menu [ par rosalin83 ]
bonsoir,je vx creer un editeur de menu avec javascript voilà ce que j'ai fait mais j'ai trouvé des dificultés au niveau de l'etape suivante plus préci
2 Select liés ensemble [ par folkene ]
Voila je me suis un peu inspirer de ce que j'ai trouvé sur ce forum, je l'ai modifié mais je l'ai mal fait, resultat mes tableau se créent bien, mes f
problème affichage texte temporisé pour diaporama [ par pascaloug ]
Est-ce que quelqu'un peut m'aider à trouver l'erreur dans le javascript ci-dessous pour afficher un titre temporisé dans mon diaporama SVP ?La solutio
Récupération des champs d'un formulaire dynamique [ par Crabece ]
Bonjour à tous,Je vous expose mon problème en essayant d'etre le plus claire possible :Je travaille actuellement sur un site de vente en ligne et mon
Problème de listes déroulantes liées [ par deatmead ]
Bonsoir tout le monde, Déjà j'esper poster dans la bonne section.Voilà après plusieurs jours de recherche, tuto, messages sur les forums, je n'arriv
Prob length sur un array associatifs [ par destiny ]
Bonjour,Tout est dans le titre, je me tue a essayer de connaitre le nbr d'enregistrement dans les deux tableaux ci-dessous ...Ca me retoure toujours
Problème avec un array de div et l'attribut className [ par Noursounet ]
Bonjour à tous,Je suis en train de développer un objet Multiview tout en javascript et je bute sur un problème qui je pense est lié à IE7. Le principe
class et id définis dans une même balise ? [ par sagat06 ]
Bonjour à tous.J'aimerais savoir s'il existe un moyen de définir à la fois la class et l'id d'une div, du genre:En effet, j'ai plusieurs div dans ma p
select lie [ par leon988 ]
Bonjour à tous, Pour mon site je dois créer un formulaire de recherche avec 3 selects Select1= selection d'une activite <p clas
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|