Каррирование c переменным количеством аргументов

помогите разобраться с каррированием. Я легко могу изобразить функцию с несколькими параметрами типа sum(a)(b)...и тд. и тп. при помощи каррирования:

function sum() {
    return (a) => {
      return (b) => {
       return a + b
      }
   }
}

Но, как только количество элементов в аргументе становится больше единицы, все мои потуги руинятся в нескончаемые ошибки.

Внимание вопрос: Как мне добраться до внутренностей аргументов. Задача: получить сумму всех элементов. Пример: sum(1, 7)(4, 1, 9) должно вернуть 22

Спасибо за внимание!


Ответы (1 шт):

Автор решения: UserTest013

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

const sum = curry((a, b, c, d, e) => a + b + c + d + e);

console.log(sum(1, 7)(4, 1, 9));

→ Ссылка