質問: function(a, b){ return a > b; }; document.body.innerHTML += '1) ' + arr1.sort(compare).join(',') + ''; document.body.innerHTML += '2) ' + arr2.sort(compare).join(',') + ''; document.body.innerHTML += '3) ' + arr2.sort().join(','); ``` Firefoxなら2)と3)が同じ結果になるのですが、 Chromeで実際に実行すると以下の結果になります。2)が変です。 ``` 1) fuga0,fuga1,fuga2,fuga3,fuga5,fuga6,fuga7,fuga8,hoge0,piyo0 2) fuga3,fuga9,fuga0,fuga1,fuga2,fuga8,fuga5,fuga6,fuga7,hoge0,piyo0 3) fuga0,fuga1,fuga2,fuga3,fuga5,fuga6,fuga7,fuga8,fuga9,hoge0,piyo0 ``` これはバグなのでしょうか?それともソートの仕方が間違っているのでしょうか?
回答: 比較関数には ``` 1つ目の引数が2つ目の引数よりも小さい場合は、負の値を返す。 2つの引数が等しい場合は0を返す。 1つ目の引数が2つ目の引数よりも大きい場合は、正の値を返す。 ``` 必要があります。 なので、示された比較関数は正確にはこの条件を満たしていません。 例えば、以下のようにする必要があります。 `var compare = function(a,b){ return (a > b) - (a < b); };`