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