按属性排序JSON数组的通用方法

use*_*gBy 19 javascript arrays sorting json

我在http://www.devcurry.com/2010/05/sorting-json-array.html上找到了如何对JSON数组进行排序的方法

现在我想以通用的方式对它进行排序; 这样我的排序函数就知道要排序的属性.

例如,如果我的数组是

[
  {
    "name": "John",
    "age": "16"
  },
  {
    "name": "Charles",
    "age": "26"
  }
]
Run Code Online (Sandbox Code Playgroud)

我想避免写一些不同的案例,以便知道我是否应按姓名或年龄排序.我只想传递参数'name'或'age',我的排序功能应该知道该怎么做.

谢谢.

Eng*_*eer 79

像这样的东西:

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") );
Run Code Online (Sandbox Code Playgroud)


age*_*hun 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]);
Run Code Online (Sandbox Code Playgroud)

在 jsFiddle 中试试这个例子。