実際の問題については、最後の編集を参照してください。
さて、次のようなシナリオがあります:
a = [false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
次に、次のようにします。
a.sort(function(a,b){return !a && b});
次のような結果が出ます:
[false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
まあ、そういうことになっているけど...まだ完全には... :(
この配列をソートするにはどうすればいいでしょうか?
編集:
なぜ a.sort() だけを使用しなかったのか疑問に思うかもしれませんが、実際の配列はオブジェクトであり、投稿したような単純な配列ではないからです。実際の配列には、[{xx:true},{xx:false},...] のような要素があります。
ベストアンサー1
a = [false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false];
a.sort(function(x, y) {
// true values first
return (x === y)? 0 : x? -1 : 1;
// false values first
// return (x === y)? 0 : x? 1 : -1;
});
console.log(a);
a と b の両方が同じ値の場合は 0 を返し、a が true の場合は -1 を、それ以外の場合は 1 を返す必要があります。