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

How to sort javascript objects based on their properties, specifying the property

本文关键字:属性 排序 何根 javascript 对象      更新时间:2023-09-26

在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个参数。

有什么建议吗?

许多谢谢。

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

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

你可以这样使用:

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

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

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

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

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