1. ホーム
  2. javascript

[解決済み] Javascript でオブジェクトの配列を boolean プロパティでソートする

2022-08-18 16:18:50

質問

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

OK、私はこのシナリオを持っています。

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]

なんとなくソートされているような...でもちょっと違うような... :(

この配列をソートするにはどうしたらいいのでしょうか?

EDITです。

なぜ私がa.sort()を使わなかったか不思議に思っているなら、私の実際の配列はオブジェクトの配列であり、私が投稿したもののような単純な配列ではないからです。実際の配列は [{xx:true},{xx:false},...] のような要素を持っています。

どのように解決するのですか?

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が真の場合は-1、それ以外の場合は1を返す必要があります。