begin process at 2012 05 30 02:26:25
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Javascript / DHTML / Ajax

 > 

JavaScript et le navigateur

 > 

Autre

 > 

tri d'un array multidimensionnel par colonne


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

tri d'un array multidimensionnel par colonne

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

ludovicanceaux

Membre Club


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

Membre Club


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

Membre Club


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,

1 2

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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,530 sec (4)

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