对JS数组进行分组排序
Grouped sorting on a JS array
我有一个对象数组,它有两个属性:Name和Hours
例如:array = [
{name: "ANDY", hours: 40 },
{name: "ANDY", hours: 50 },
{name: "GREG", hours: 40 },
]
例如,在我的数组中,我希望排序的结果首先是拥有最多小时的Andy,然后是拥有较少小时的Andy,然后是Greg,因为他的名字按字母顺序排在后面,依此类推。
由于array.sort()函数传递数组的两个元素进行比较,我意识到这不是我要走的路,但未能提出一个优雅的解决方案。
array = [
{name: "ANDY", hours: 40 },
{name: "GREG", hours: 40 },
{name: "ANDY", hours: 50 },
]
function cmp(x, y) {
return x > y ? 1 : (x < y ? -1 : 0);
}
array.sort(function(a, b) {
return cmp(a.name, b.name) || cmp(b.hours, a.hours)
})
console.log(array)
如果javascript有一个宇宙飞船操作符,那就更优雅了。注意,这段代码很容易扩展以使用更多属性:
ary.sort(function(a, b) {
return cmp(a.name, b.name) || cmp(a.age, b.age) || cmp(b.hours, a.hours) || ....
})
var arr = [{
name: "GREG",
hours: "40"
}, {
name: "ANDY",
hours: "50"
}, {
name: "ANDY",
hours: "40"
}];
Array.prototype.sortOn = function(conds){
this.sort(function(a, b){
for(var i=0; i < conds.length; i++){
var c = conds[i].split(" ");
if(a[c[0]] < b[c[0]]){
return c[1] == "asc" ? -1:1;
}
if(a[c[0]] > b[c[0]]){
return c[1] == "asc" ? 1:-1;
}
}
return 0;
});
return this;
}
arr.sortOn(["name asc", "hours dsc"]);
obj.sort(function(item1,item2) {
if ( item1.Name < item2.Name )
return -1;
if ( item1.Name > item2.Name )
return 1;
return item1.Hours - item2.Hours;
});
可以按Name排序,然后按Hours
的例子:
var array = [{"Name":"ANDY", "Hours":40},
{"Name":"ANDY", "Hours":50},
{"Name":"GREG", "Hours":40}];
var sortedArray = array.sort(function(a,b) {
return (a["Name"] > b["Name"]) ? 1 : -1;
}).sort(function(a,b) {
if(a["Name"] == b["Name"])
return (a["Hours"] < b["Hours"]) ? 1 : -1;
else
return 0;
});
相关文章:
- Selectize.js:如何对整数值的选项进行排序
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- 在d3.js中对x轴上的日期进行排序
- Sencha Ext JS排序标准以字符串而不是JSON的形式发送
- 使用JS或新查询对列表进行排序
- 如何使d3.js树布局按字母顺序对节点进行排序
- 如何在角度js的自动完成下拉列表中对项目列表(按字母顺序)进行排序
- 酒窝 JS 多个 y 轴 - 更改默认排序
- 按类别排序;元素有多个类别(同位素.js)
- 转到其他 URL 后,如何保持排序的骨干.js集合
- 骨干.js具有多种排序的集合
- 如何在节点中进行 Json 对象排序.js
- 可排序.js不起作用:列表项不可拖动
- 嵌套可排序.js toarray 不起作用
- 按特定字母排序JS字符串数组
- 排序JS数组按日期DD/MM/YY格式
- 在HTML页面中排序js文件的最佳方式
- 长XML - 优化排序(js - google adwords)
- 使用时刻和排序插件在数据表中按日期(dd.mm.YYYY)排序.js