Я прохожу курс Udemy ES6 Javascript: The Complete Developer's Guide
Stephen Grider самостоятельно. Большинство первых 4 разделов были слишком простыми, поэтому я выполнял все упражнения с функциями жирных стрелок (которые для меня в новинку и пока не рассматривались в курсе), чтобы сделать их более интересными.
Однако когда я добрался до Coding Exercise 8: Challenging! Implementing 'reject', я не мог понять, как это сделать с помощью жирных стрелочных функций.
Задача состоит в том, чтобы создать функцию под названием «отклонить», которая работает противоположно Array.filter. Концептуально это просто - просто используйте !.
Оказавшись в тупике, я нашел предлагаемое решение с использованием функций жирных стрелок, которое работает. Вот:
const numbers = [10, 20, 30];
function reject(array, iteratorFunction) {
return array.filter(arrItem => !iteratorFunction(arrItem))
}
reject(numbers, num => num > 15);
Я не понимаю этого. Может кто-нибудь объяснить, что здесь происходит? Кроме того, есть ли лучшая реализация с использованием функций жирных стрелок?
Вы передаете для отклонения в качестве второго аргумента абстрактную функцию «num => num <15», поэтому эта «! IteratorFunction (arrItem))» вызывает ее



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


num => num> 15 переводится в следующую анонимную функцию
function(num){
return num > 15
}
Если у вас только один аргумент, вам не нужно использовать круглые скобки, а если вы возвращаете выражение, вы можете пропустить фигурные скобки и написать «return»
После того, как синтаксис функции ясен, нужно просто передать функцию в качестве аргумента для отклонения и предоставить значения массива в качестве аргумента анонимной функции.
Чтобы понять пример, нужно знать и использовать функции обратного вызова, анонимные функции и синтаксис стрелок.
Рассмотрим код:
function reject(array, iteratorFunction) {
return array.filter(arrItem => !iteratorFunction(arrItem));
}
Определение массива filter: метод filter() создает новый массив со всеми элементами, которые проходят проверку, реализованную предоставленной функцией обратного вызова.
Что такое функция обратного вызова? Функция обратного вызова - это функция, переданная в другую функцию в качестве аргумента, которая затем вызывается внутри внешней функции для выполнения какой-либо процедуры или действия. Этот вызов происходит, когда функция с ее телом (кодом) фактически передается во время вызова.
Следующий код - это функция обратного вызова: arrItem => !iteratorFunction(arrItem)
Функция возвращает логическое значение. Функция написана в виде стрелочного синтаксиса.
Это также можно записать как:
function(arrItem) {
return !iteratorFunction(arrItem);
}
iteratorFunction также является функцией обратного вызова, которая возвращает логическое значение. Символ '!' Оператор отменяет возвращаемое логическое значение (превращает истину в ложь и наоборот).
Итак, следующий код функции reject работает аналогично:
function reject(array, iteratorFunction) {
return array.filter(function(arrItem) {
return !iteratorFunction(arrItem);
});
}
-следующее такое же, как указано выше-
function reject(array, iteratorFunction) {
let myCallback = function(arrItem) {
return !iteratorFunction(arrItem);
};
return array.filter(myCallback);
}
iteratorFunction - функция обратного вызова
В примере рассмотрим этот код: num => num > 15
Код представляет собой стрелочный синтаксис функции обратного вызова. Это также можно записать как:
function(num) {
return num > 15;
}
Это означает код:
let result = reject(numbers, num => num > 15);
-можно также записать как-
let result = reject(numbers, function(num) {return num > 15});
-можно также записать как-
let myCallback = function(num) {
return num > 15;
}
let result = reject(numbers, myCallback);
Результат: [ 10 ]
Что именно не вы понимаете?