Javascript 按属性对 JSON 数组进行排序的通用方法
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11099610/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Generic way of sorting JSON array by attribute
提问by userPassingBy
I found out how to sort a JSON array at http://www.devcurry.com/2010/05/sorting-json-array.html
我在http://www.devcurry.com/2010/05/sorting-json-array.html找到了如何对 JSON 数组进行排序
Now I want to sort it in a generic way; so that my sorting function knows which attribute to sort by.
现在我想以通用的方式对其进行排序;这样我的排序函数就知道要按哪个属性排序。
For example if my array is
例如,如果我的数组是
[
{
"name": "John",
"age": "16"
},
{
"name": "Charles",
"age": "26"
}
]
I want to avoid writing different if cases to know if I should sort by name or age. I just want to pass a parameter 'name' or 'age' and my sorting function should know what to do.
我想避免写不同的 if 案例来知道我是否应该按姓名或年龄排序。我只想传递一个参数“名称”或“年龄”,我的排序功能应该知道该怎么做。
Thanks.
谢谢。
回答by Engineer
Something like a:
类似的东西:
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") );
回答by agershun
You can sort arrays by any field with Alasqllibrary:
您可以使用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]);
Try this example in jsFiddle.
在 jsFiddle 中试试这个例子。
回答by Anand
See this example http://jsfiddle.net/W8Byu/1/
请参阅此示例 http://jsfiddle.net/W8Byu/1/
What I have done is stored the sort column Name in a variable and used in Sort function.
我所做的是将排序列 Name 存储在一个变量中并在 Sort 函数中使用。
var sortColumnName = "Name";
function SortByName(x,y) {
return ((x[sortColumnName] == y[sortColumnName]) ? 0 : ((x[sortColumnName]> y[sortColumnName]) ? 1 : -1 ));
}