Array.sort() Javascript avec 2 conditions

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par ZelkiN, 2 Décembre 2011.

  1. ZelkiN
    ZelkiN WRInaute occasionnel
    Inscrit:
    27 Juillet 2007
    Messages:
    463
    J'aime reçus:
    0
    Bonjour à vous tous !
    Actuellement j'ai un petit problème avec un tri de tableau en Javascript. En effet j'utilise la méthode sort() qui me semble standard. Cependant j'ai 2 conditions de tri...mon tableau :

    array [prix,description,sous_produits[sous_produit_1,sous_produits_2..]]

    J'aimerai classer mon array par prix mais aussi par nombre de sous produit avec sous_produits.length par exemple.

    Je bloque de ce coté la, quelqu'un aurait un exemple ou pour éclairer ma lanterne ?

    merci ! :D
     
  2. ZelkiN
    ZelkiN WRInaute occasionnel
    Inscrit:
    27 Juillet 2007
    Messages:
    463
    J'aime reçus:
    0
    Ok, j'ai trouvé la réponse, donc pour ceux que ca intérresse :

    Code:
    function sort_table(a,b){
    	aplayer = 4-a[2].length; //mon champs sous_produits ne peux contenir que 4 élements :)
    	bplayer = 4-b[2].length;
    	a = a[0]+aplayer;
    	b = b[0]+bplayer;
    	return a == b ? 0 : (a < b ? -1 : 1)
    }
    
    var mon_nouveau_tableau_trié = array.sort(sort_table);
    
    Bonne journée !
     
  3. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 593
    J'aime reçus:
    0
    Ce n'est pas tout à fait exact, si tu fais ça tu vas avoir un mélange, puisque l'écart des longueurs peut "compenser" l'écart de prix.

    Deux options: soit tu multiplies le premier critère par un nombre relativement élevé (i.e. plus que l'étendue de valeurs du deuxième critère) avant d'ajouter le deuxième critère, soit tu utilises || pour enchaîner les critères.

    Note aussi qu'il n'est pas nécessaire de renvoyer spécifiquement -1,0 ou 1, une valeur négative, nulle ou positive suffit.

    Perso, je déconseillerais aussi le 4-x (tu ne sais pas comment ça peut changer à l'avenir), il suffit de faire a-b pour trier dans un sens et b-a pour trier dans l'autre.

    Par exemple:
    Code:
    return (a[0]-b[0]) || (b[2].length - a[2].length)
    C'est un chouïa plus compliqué si tu compares des chaînes, il faut utiliser localeCompare pour simplifier.

    Jacques.

    EDIT: typo: localeCompare, pas localCompare.
     
Chargement...
Similar Threads - Array sort() Javascript Forum Date
Problème organisation Array Développement d'un site Web ou d'une appli mobile 4 Août 2020
Distribution dans un array Développement d'un site Web ou d'une appli mobile 21 Mars 2019
Tri tableau array en PHP Développement d'un site Web ou d'une appli mobile 26 Février 2019
Tronquer un tableau array Développement d'un site Web ou d'une appli mobile 27 Novembre 2017
Comment utiliser array_map si une seule checkbox est cochée ? Développement d'un site Web ou d'une appli mobile 14 Mars 2017
PHP -Problème retraitement données Mysql avant envoit dans un tableau array Développement d'un site Web ou d'une appli mobile 28 Décembre 2016
Simplifier un script (2 in_array) Développement d'un site Web ou d'une appli mobile 22 Septembre 2016
Fichier .txt => Tableau Array() ? Développement d'un site Web ou d'une appli mobile 13 Juillet 2014
Balises title en double et signification "array" e-commerce 15 Juin 2014
array PHP Développement d'un site Web ou d'une appli mobile 4 Avril 2014
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice