Объясните пример с помощью обратного вызова (функция жирной стрелки) в качестве аргумента функции - PullRequest
0 голосов
/ 09 января 2019

Я прохожу курс удэми ES6 Javascript: The Complete Developer's Guide Stephen Grider самостоятельно. Большинство первых 4 разделов были слишком простыми, поэтому я выполнял все упражнения с функциями жирных стрелок (которые для меня новы и пока не рассмотрены в курсе), чтобы сделать их более интересными.

Однако, когда я добрался до Coding Exercise 8: Challenging! Implementing 'reject', я не мог понять, как это сделать с помощью жирных стрелок.

Задача состоит в том, чтобы создать функцию с именем 'reject', которая работает противоположно Array.filter. Концептуально это просто - просто используйте !.

Находясь в тупике, я нашел предложенное решение с использованием функций жирной стрелки, которые работают. Вот оно:

const numbers = [10, 20, 30];

function reject(array, iteratorFunction) {
    return array.filter(arrItem => !iteratorFunction(arrItem))

}
reject(numbers, num => num > 15);

Я не понимаю этого. Может кто-нибудь объяснить, что здесь происходит? Кроме того, есть ли лучшая реализация с использованием жирных стрелок?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Чтобы понять пример, нужно знать и использовать функции обратного вызова, анонимные функции и синтаксис стрелки.

Рассмотрим код:

function reject(array, iteratorFunction) {
    return array.filter(arrItem => !iteratorFunction(arrItem));
}

Определение массива filter: метод filter() создает новый массив со всеми элементами, которые проходят тест, реализованный предоставленной функцией обратного вызова.

Что такое функция обратного вызова? Функция обратного вызова - это функция, передаваемая в другую функцию в качестве аргумента, которая затем вызывается внутри внешней функции для выполнения некоторой процедуры или действия. Этот вызов происходит, когда функция с ее телом (кодом) фактически передается во время вызова.

Следующий код является функцией обратного вызова: arrItem => !iteratorFunction(arrItem) Функция возвращает логическое значение. Функция написана как синтаксис стрелки.

Это также можно записать как:

function(arrItem) {
    return !iteratorFunction(arrItem);
}

iteratorFunction также является функцией обратного вызова, которая возвращает логическое значение. "!" оператор возвращает возвращаемое логическое значение как отрицательное (превращает true в false и наоборот).

Итак, следующий 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 ]

0 голосов
/ 09 января 2019

num => num> 15 переводится в следующую анонимную функцию

function(num){
  return num > 15
}

Если у вас есть только один аргумент, вам не нужно указывать круглые скобки, а если вы возвращаете выражение, вы можете пропустить фигурные скобки и написать «return»

Если синтаксис функции понятен, то речь идет о передаче функции в качестве аргумента для отклонения и предоставлении значений массива в качестве аргумента анонимной функции.

...