19

http://www.devcurry.com/2010/05/sorting-json-array.htmlで JSON 配列をソートする方法を見つけました。

ここで、一般的な方法で並べ替えたいと思います。私のソート関数がソートする属性を認識できるようにします。

たとえば、私の配列が

[
  {
    "name": "John",
    "age": "16"
  },
  {
    "name": "Charles",
    "age": "26"
  }
]

名前や年齢でソートする必要があるかどうかを知るために、異なるケースを書くことは避けたい. パラメータ「名前」または「年齢」を渡したいだけで、ソート機能は何をすべきかを知っている必要があります。

ありがとう。

4

3 に答える 3

80

次のようなもの:

function predicateBy(prop){
   return function(a,b){
      if (a[prop] > b[prop]){
          return 1;
      } else if(a[prop] < b[prop]){
          return -1;
      }
      return 0;
   }
}

//Usage
yourArray.sort( predicateBy("age") );
yourArray.sort( predicateBy("name") );
于 2012-06-19T11:07:23.670 に答える
5

Alasqlライブラリを使用して、任意のフィールドで配列を並べ替えることができます。

var data = [{"name":"John", "age":"16"}, {"name":"Charles", "age":"26"}];

var res1 = alasql('SELECT * FROM ? ORDER BY name',[data]);
var res2 = alasql('SELECT * FROM ? ORDER BY age',[data]);
var res3 = alasql('SELECT * FROM ? ORDER BY age, name',[data]);
var res4 = alasql('SELECT * FROM ? ORDER BY age DESC, name ASC',[data]);

この例を jsFiddle で試してください。

于 2014-12-18T10:24:04.593 に答える
4

この例を参照してください http://jsfiddle.net/W8Byu/1/

私が行ったことは、並べ替え列の名前を変数に格納し、並べ替え関数で使用することです。

 var sortColumnName = "Name";

 function SortByName(x,y) {
      return ((x[sortColumnName]  == y[sortColumnName]) ? 0 : ((x[sortColumnName]>    y[sortColumnName]) ? 1 : -1 ));
    }
于 2012-06-19T11:09:49.930 に答える