Как отсортировать объекты javascript по их свойствам, указав свойство - PullRequest
5 голосов
/ 18 сентября 2011

На 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 аргумента.

Есть предложения, как мне это сделать?

Большое спасибо.

Ответы [ 2 ]

8 голосов
/ 18 сентября 2011

Вам нужно написать функцию, которая берет имя свойства и возвращает компаратор:

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

Вы бы использовали его так:

arr.sort(createComparator("maxSpeed"));
2 голосов
/ 18 сентября 2011

sort принимает функцию, которая может быть анонимной:

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

Если вы действительно не хотите этого, вы можете определить функцию sortObjectsOnProperty (), которая будет возвращать обратный вызов сортировки следующим образом:

function sortObjectsOnProperty(name) {
    return function(a, b) { return a[name] - b[name]; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...