1

Jquery.ajax を使用して呼び出したフィードを並べ替えようとしています。フィード内の配列の値の数で並べ替えようとしています。

たとえば、このフィードでは、NFL チームの数で降順​​に並べ替えたいので、カリフォルニア、ニュージャージー、マサチューセッツの順に並べ替えます。

[
   {
      "title":"New Jersey",
      "NFLteams":[
         {
            "Name":"Jets",
            "Conference":"AFC",
         },
         {
            "Name":"Giants",
            "Conference":"NFC",
         }
         ]
   },
   {
      "title":"Massachusetts",
      "NFLteams":[
         {
            "Name":"Patriots",
            "Conference":"AFC",
         }
         ]
   },
   {
      "title":"California",
      "NFLteams":[
         {
            "Name":"Raiders",
            "Conference":"AFC",
         },
         {
            "Name":"49ers",
            "Conference":"NFC",
         },
         {
            "Name":"Chargers",
            "Conference":"AFC",
         }
         ]
   }
]

私はこのようなコードを試しました (このスレッドJavaScript オブジェクトの配列の並べ替えから) が、動作しません (NFLteams.length にしても):

   var sort_by = function(field, reverse, primer){
   var key = function (x) {return primer ? primer(x[field]) : x[field]};

   return function (a,b) {
      var A = key(a), B = key(b);
      return ( (A < B) ? -1 : ((A > B) ? 1 : 0) ) * [-1,1][+!!reverse];                  
   }
   }
   data.sort(sort_by('NFLteams', false, function(a){return a.toUpperCase()}))    

配列内の値の数でソートする方法について何か提案はありますか? 助けてくれたり、正しい方向に向けてくれる人に感謝します。

4

4 に答える 4

4

配列の長さプロパティを使用すると、メソッドが機能するようです。

data.sort(sort_by('NFLteams', false, function(a){return a.length}))

JsBin を参照してください: http://jsbin.com/eWafEMe/1/edit

于 2013-09-02T15:54:24.777 に答える
1

このような単純な関数でうまくいきます。

data.sort(function(a,b){
     return b.NFLteams.length - a.NFLteams.length;
});

http://jsfiddle.net/x9d2J/

于 2013-09-02T15:52:21.180 に答える
1

並べ替え関数で比較を逆にして、降順で返します。

.sort(function(team1, team2) {
    return team2.NFLteams.length - team1.NFLteams.length;
});

または結果に -1 を掛けます。

.sort(function(team1, team2) {
    return -1 * (team1.NFLteams.length - team2.NFLteams.length);
});

このフィドルからのコンソール出力を参照してください

于 2013-09-02T15:52:45.080 に答える
0

あなたが試すことができますunderscore's sortBy

_.sortBy(i, function(team){ return team['NFLteams'].length }).reverse();

i入力配列はどこにありますか。

フィドル: http://jsfiddle.net/kMbsW/

于 2013-09-02T15:49:38.520 に答える