3

我有这个非常简单的排序方法:

sortByNumericAttr : function (a, b,attr){            
        a = a[attr];
        b = b[attr];
        return ((a < b) ? -1 : ((a > b) ? 1 : 0));
}

这里的想法是我有不同的对象需要排序(id,类型等),所以我想而不是为每个对象编写不同的排序函数(所有的区别只是排序的属性),我会写一个通用方法并将属性传递给它。

所以如果它是这样写的,我可以这样称呼它:

arr.sort(utils.sortByNumericAttr,'typeId');

基于这个功能,我怎样才能达到这个或类似的效果?

4

2 回答 2

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')).

于 2013-02-13T08:11:12.583 回答
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);
于 2013-02-13T08:20:06.753 回答