Array.sort() Javascript avec 2 conditions

WRInaute occasionnel
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
 
WRInaute occasionnel
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 !
 
WRInaute accro
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.
 
Discussions similaires
Haut