Algorithms

Compose

Compose.js
const compose = (...funcs) => {
  return (...params) => {
    let value;
    for (let index = funcs.length - 1; index >= 0 ; index -= 1) {
      const param = value ? [value] : params;
      value = funcs[index].apply(this, param);
    }
    return value;
  };
};

Currying

Currying.js
const currying = (func, ...args) => {
  const funcArguments = [];
  const funcLength = func.length;
  const tempFun = (funcArgs) => {
    funcArguments.splice(funcArguments.length, 0, funcArgs);
    if (funcLength > funcArguments.length) {
      return tempFun;
    }
    return func.apply(this, funcArguments);
  };
  return tempFun(args);
};

Debounce

Delay

Infinite args/calls

Pipe

Last updated