自定义JavaScript数组的排序功能

时间:2013-02-13 08:09:06

标签: javascript jquery

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

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

如何基于此功能实现此效果或类似效果?

2 个答案:

答案 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);