0

重複の可能性:
オブジェクトの配列をソートする単純な関数

スクリプトの作成中に、配列の並べ替えで問題が発生しました。私はオブジェクトの配列を持っています:

[{gold: false, range: 1601}, {gold: true, range: 13}, {gold: false, range: 375}, {gold: true, range: 601}

ただし、次のようになります。

[{gold: true, range: 13}, {gold: true, range: 601}, {gold:false, range: 375}, {gold: false, range: 1601}]

キーが範囲の昇順でソートされている配列を取得したいと考えています。しかし、金のキー値が true の場合、それらが最初です。

4

2 に答える 2

11

次のようなものを使用します。

yourArray.sort(function(a, b){
    return a["gold"] == b["gold"] ? a["range"] - b["range"] : a["gold"] ? -1 : 1;
});

またはこれでも:

yourArray.sort(function(a, b){
    return  b["gold"] - a["gold"] || a["range"] - b["range"];
});

2 番目のアプローチは実にクールです)) オブジェクト内の任意の数のフィールドにこのパターンを使用し、重要度順に並べることができます。一部のフィールドを昇順でソートする必要がある場合 - a["..."] - b["...]、降順の場合 - b["..."] - a["..."] より

于 2012-12-29T12:32:09.993 に答える
3

試す

var arr = [{gold: false, range: 1601}, {gold: true, range: 13}, {gold: false, range: 375}, {gold: true, range: 601}], 
    sorter = function(a, b) {
      if(a.gold && !b.gold) {return -1;}
      if(!a.gold && b.gold) {return 1;}
      return a.range - b.range;
    };

arr.sort(sorter);
于 2012-12-29T12:28:38.873 に答える