Значения a
и b
определяются функцией Array#sort
, что и вызывает стрелу функция. Это то же самое, что и с обычными функциями; например, ваш код будет работать одинаково, как это:
console.log(arr.sort(function(a, b) {
return a.name[1] < b.name[1];
});
Внутри Array#sort
, вы можете себе представить вызов обратного вызов:
function Array_sort(callback) {
// ...
while (not_done_sorting_yet) {
// ...
result = callback(element[x], element[y]); // The call to your callback
// ...code using result...
}
// ...
}
Так же, как с любым обратным вызовом (действительно, любая функция), это код , вызывающий, который определяет, какие аргументы он получает, и их значения. (Игнорирование частичного применения для простоты.)
BTW: Этот код является неправильным, возвращаемое значение из sort
обратного вызова должно быть номером, а не логическим значения: 0
если a
и b
равны для сортировки, меньше нуля a
«меньше» b
для целей сортировки (должен быть до b
) и больше нуля, если a
«больше чем» b
для сортировки (должно прибыть после b
).
Вот правильный вариант (для массива «сортируются в алфавитном порядке по реверс второй букве имени свойства» [с комментарием в цитируемом коде]):
// Reverse alpha by second letter in name
console.log(arr.sort((a, b) => b.name[1].localeCompare(a.name[1])));
... так String#localeCompare
возвращает соответствующее значение поскольку строка, на которую вы назовете ее, «меньше» или «больше» той, с которой вы ее вызываете. (И name[1]
является односимвольной строкой.)
Речь идет не о функциях стрелок. 'sort' - это функция более высокого порядка, она требует обратного вызова, который вызывается с двумя аргументами. 'a' и' b' можно назвать чем угодно. – elclanrs
Имеет ли книга * действительно * 'arr.sort ((a, b) => a.name [1]
Это правда? Я думал, что функции стрелок, которые опускают wrapping, '{}' 'автоматически возвращаются. Изменить: он работает (хотя я бы, вероятно, отсортировал по имени [0] ', а не' name [1] ' – pmilla1606