Answer

Answer

t.me/js_test

Ответ:

function curry(func) {
    return function curried(...args) {
        if (args.length >= func.length) {
            return func.apply(this, args);
        } else {
            return function (...args2) {
                return curried.apply(this, args.concat(args2));
            };
        }
    };
}

Обьяснение:

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

Код для проверки:

function curry(func) {
    return function curried(...args) {
        if (args.length >= func.length) {
            return func.apply(this, args);
        } else {
            return function (...args2) {
                return curried.apply(this, args.concat(args2));
            };
        }
    };
}

const sum = (a, b, c) => {
    return a + b + c;
};

const currySum = curry(sum);

console.log(currySum(1, 1, 1)); // 3
console.log(currySum(1)(1, 1)); // 3
console.log(currySum(1, 1)(1)); // 3
console.log(currySum(1)(1)(1)); // 3

Report Page