2010-11-28 20 views
18

Quelqu'un sait pourquoi Safari 5 (Windows 7) ne peut pas trier les tableaux d'objets?Pourquoi Safari 5 ne triera-t-il pas un tableau d'objets?

var arr = [{a:1},{a:3},{a:2}]; 
console.log(arr[0].a+','+arr[1].a+','+arr[2].a); 
arr.sort(function(a,b){return a.a > b.a;}); 
console.log(arr[0].a+','+arr[1].a+','+arr[2].a); 

Le résultat de la console devrait être

1,3,2 
1,2,3 

Cela fonctionne très bien dans FF et IE mais retourne Safari:

1,3,2 
1,3,2 

Répondre

47

Votre fonction de comparaison est erronée:

function(a,b){return a.a > b.a;} 

La fonction devrait revenir négative, nulle ou positive selon si < b, a = b ou a> b. Votre fonction renvoie un booléen indiquant si a> b. Essayez quelque chose comme:

function(a,b){return a.a - b.a;} 
+0

Merci beaucoup! C'est vraiment une bénédiction mitigée que certains navigateurs soient gracieux et d'autres rigides ... – Marc

+0

@Marc: En fait je crois que tu as eu de la chance avec ce petit ensemble de chiffres; votre fonction d'origine n'a renvoyé que 2 des 3 réponses possibles, donc elle aurait échoué sur IE/FF avec un plus grand ensemble. – casablanca

+9

Chrome et Firefox accepteront vrai ou faux, pas Safari. –