Карри с фильтром - PullRequest
       5

Карри с фильтром

0 голосов
/ 12 мая 2018
let dragons = [
    { name: "Test1", power: "Fire" },
    { name: "Test2", power: "Lightning" },
    { name: "Test3", power: "Fire" },
    { name: "Test4", power: "Fire" },
    { name: "Test5", power: "Speed" },
    { name: "Test6", power: "Fly" }
];

let hasPower = power =>
    obj => 
        obj.power === power

let fireDragons = dragons.filter(hasPower("Fire"));

Я получаю часть с карри, но я не понимаю, как функция карри передается через фильтр от obj, кто-нибудь может мне это объяснить?

1 Ответ

0 голосов
/ 13 мая 2018

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

var newArray = arr.filter(callback(currentValue[, index[, array]])[, thisArg])

callback Функция является предикатом, чтобы проверить каждый элемент массива. Верните true, чтобы сохранить элемент, иначе false, принимая три аргумента: element, index и сам array. thisArg необязательно, хотя.

Теперь давайте попробуем разобраться в коде.

let hasPower = power =>
    obj => 
        obj.power === power

Функция hasPower может быть обновлена ​​как:

let hasPower = function (power) {
    return function (obj) {
        return obj.power === power;
    }
}

Просто имейте в виду, что всякий раз, когда будет выполняться hasPower, он просто возвращает функцию (которая будет выполнена позже) и будет иметь доступ к переменной power. (Подробнее: Закрытие )

а теперь огненные драконы

let fireDragons = dragons.filter(hasPower("Fire"));

Вы передаете функцию в качестве параметра функции фильтра ( вызывает также ).

При выполнении этой строки кода сначала будет выполняться функция hasPower("Fire"), и все, что будет возвращено из этой функции, будет передано фильтру как функция callback.

По сути, это будет что-то вроде:

let fireDragons = dragons.filter(function (obj) {
    // Having access to the `hasPower` variable which is "Fire" in your case.
    return obj.power === power;
});

или точно так: enter image description here

Всегда старайтесь отлаживать в инструментах разработчика, чтобы понять, как работает код, и не стесняйтесь заменять функции-стрелки обычными, чтобы сделать его более читаемым / понятным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...