javascript сортировка jquery

Я делаю много сортировки и в настоящее время делаю это так:

function sortby(a, b, prop) {
    if (a[prop].toLowerCase() > b[prop].toLowerCase())
        return 1;
    else
        return -1
}

Используется так:

someArray.sort(function (a, b) { return sortby(a, b, 'propertyname') });

Но я подозреваю, что можно сделать что-то более умное с применением или связыванием, как

someArray.sort(sortby.bind(a,b,'propertyname'))?

1 ответ

Решение

Да, это, конечно, возможно. apply возвращает результат функции, поэтому он не применим здесь, однако, bind подходит.

Вы можете прочитать документы MDN для Bind.

Поскольку связывание работает по порядку, если вы измените порядок своих параметров, это красиво и элегантно. Давайте изменим подпись sortby чтобы: function sortby(prop, a, b) {, Теперь мы можем легко сказать bind исправить первый параметр:

someArray.sort(sortby.bind(undefined, 'propertyname'));

Обратите внимание undefined, Первый параметр для bind (согласно документации) это новый this ссылка. Так как мы не используем его, мы передадим undefined сказать, что мы не хотим менять контекст. Следующий параметр сообщает bind создать функцию, которая передает значение 'propertyname' в качестве первого аргумента sortby, Это дает нам частичное применение функции; возвращая функцию, которая принимает два параметра, вызывая sortby с первым значением, которое мы уже дали, затем с двумя параметрами. Эта функция передается sortназывая это как нужно.

Вручную интерпретируя вызов связывания, он дает вам что-то вроде этого:

someArray.sort(function (a, b) {
    sortby.apply(this, 'propertyname', a, b);
});
Другие вопросы по тегам