Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : tri d'un array multidimensionnel par colonne [ JavaScript et le navigateur / Autre ] (ludovicanceaux)

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é 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...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.