2010-11-28 7 views
18

Safari 5(Windows 7)がオブジェクトの配列を並べ替えることができない理由を知っていますか?Safari 5がオブジェクトの配列をソートしないのはなぜですか?

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); 

コンソール結果は

1,3,2 
1,2,3 

する必要がありますこれはFFとIEで正常に動作しますが、Safariが返されます。

1,3,2 
1,3,2 

答えて

47

あなたの比較関数が間違っている:

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

関数は返すことが期待されます< b、a = bまたはa> bのいずれかに応じて、負、ゼロまたは正である。あなたの関数は、a> bかどうかを示すブール値を返します。次のように試してみてください:

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

ありがとうございます!それは実際には、いくつかのブラウザが優雅で、他の人は厳格な祝福です。 – Marc

+0

@Marc:実際に私はあなたがこの小さな数字のセットで運が良かったと信じています。元の関数は3つの可能な回答のうち2つしか返さなかったので、IE/FFでも大きなセットで失敗してしまいます。 – casablanca

+9

ChromeとFirefoxはtrueまたはfalseを受け入れますが、Safariは受け入れません。 –

関連する問題