如何根据javascript对象的属性对javascript对象进行排序,指定属性

时间:2011-09-18 16:23:10

标签: javascript sorting

对于类似问题,SO上有很多答案,它们都描述了如何实现自定义排序函数来对javascript对象数组进行排序。

但是,我想知道是否有可能实现更抽象的自定义排序,这将允许我传递我希望它对其进行排序的对象的属性的名称。这可能会让我不得不一遍又一遍地实现非常相似的功能。

所以如果我有一个对象构造函数,如:

function Car(mph, cc) {
    this.maxSpeed = mph;
    this.engineSize = cc;
}

然后代替实现两个排序函数:

function sortCarsOnMaxSpeed(a, b) { return a.maxSpeed - b.maxSpeed; }
function sortCarsOnEngineSize(a, b) { return a.engineSize - b.engineSize; }

我可以使用某种通用功能,例如:

function sortObjectsOnProperty(a, b, property) {
    return a[property] - b[property];
}

但自定义排序似乎只有两个参数。

关于我如何做到这一点的任何建议?

非常感谢。

2 个答案:

答案 0 :(得分:8)

您需要编写一个带有属性名称并返回比较器的函数:

function createComparator(property) {
    return function(a, b) {
        return a[property] - b[property];
    };
}

您可以这样使用它:

arr.sort(createComparator("maxSpeed"));

答案 1 :(得分:2)

sort接受一个函数,可以是匿名的:

sort(array, function(a, b) { return a.maxSpeed - b.maxSpeed; });

如果你真的不想这样,你可以定义一个sortObjectsOnProperty()函数,它返回一个像这样的排序回调:

function sortObjectsOnProperty(name) {
    return function(a, b) { return a[name] - b[name]; }
}