Javascript でブール型プロパティによってオブジェクトの配列をソートする 質問する

Javascript でブール型プロパティによってオブジェクトの配列をソートする 質問する

実際の問題については、最後の編集を参照してください。

さて、次のようなシナリオがあります:

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 を返す必要があります。

おすすめ記事