我有这个非常简单的排序方法:
sortByNumericAttr : function (a, b,attr){
a = a[attr];
b = b[attr];
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
}
这里的想法是我有不同的对象,需要排序(id,类型等)不同的attr,所以我想而不是为每个编写不同的排序函数(其中所有差异只是排序属性),I写一个通用方法并将属性传递给它。
所以,如果它是这样写的,我可以这样称呼:
arr.sort(utils.sortByNumericAttr,'typeId');
如何基于此功能实现此效果或类似效果?
答案 0 :(得分:8)
您可以使用其他功能创建一个功能:
function sort_by(attr) {
return function(o1, o2) {
var a = o1[attr];
var b = o2[attr];
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
};
}
然后将其称为.sort(sort_by('id'))
。
答案 1 :(得分:0)
如果您有这样的列表:
var list = [
{id:5, color:"Green", name:"Audi"},
{id:1, color:"Red", name:"Ferrari"},
{id:3, color:"Silver", name:"Mercedes"}
];
您可以创建排序函数,为每个使用的键对此列表进行排序:
function sortById(a,b) { return (a.id-b.id); }
list.sort(sortById);
function sortByName(a,b) { return (a.name.localeCompare(b.name)); }
list.sort(sortByName);
function sortByColor(a,b) { return (a.color.localeCompare(b.color)); }
list.sort(sortByColor);