Помогите расшифровать код javascript. Compose, reduce
Этот код фильтрует юзеров по возрасту, и возвращает массив имен, кто старше 18. Но что конкретно делает строчка "functions.reduceRight((arg, fn) => fn(arg), args)"?
const compose = (...functions) =>
args => functions.reduceRight((arg, fn) => fn(arg), args);
compose(map(u => u.name), filter(u => u.age >= 18))
Ответы (1 шт):
Давайте разберемся
const compose = (...functions) =>
args => functions.reduceRight((arg, fn) => fn(arg), args);
compose(map(u => u.name), filter(u => u.age >= 18));
const compose = (...functions) ...- объявление стрелочной функции с параметрами собранными в массивfunctionscompose(map(u => u.name), filter(u => u.age >= 18))- Вызов compose с параметрами:functions[0] = map(u => u.name) и functions[1] = filter(u => u.age >= 18);args => functions.reduceRight((arg, fn) => fn(arg), args);- можно переписать так(args) => { return functions.reduceRight((arg, fn) =>{ return fn(arg);}, args);}Вот мы и добрались до
functions.reduceRight((arg, fn) =>{ return fn(arg);}, args);- эта строка вызываетreduceRightдля массиваfunctionsв котором сидят наши функции с начальным значениемargsдля аккумулятораargи изменением его значения на каждой итерации наfn(arg)или если расписать то.arg = args; // начальное значение аккумулятора arg = functions[functions.lenght - 1](arg); // изменение значения аккумулятора на первой итерации arg = functions[functions.lenght - 2](arg);// второй итерации ..... arg = functions[0](arg);// на последней итерации return arg;
Надеюсь что стало чуть яснее.