如何使chain使用扩展参数(...chain)而不是数组?

let newData,
    newArgs,
    chain = function (data, myargs) {
        if (myargs.length === 0) {
            return;
        }
        newData = myargs[0](data);

        myargs.splice(0, 1);
        newArgs = myargs;
        // newargs === array
        chain(newData, newArgs);
    },
    add1 = (num) => {
        return num + 1;
    };


当我调用该函数时,必须这样做:chain(5, [add1, add1, add1])

但我想要:chain(5, add1, add1, add1)

问题是,在第一次调用函数后,newArgs(递归内部的函数参数)将转换为数组。

https://jsfiddle.net/btx5sfwh/

最佳答案

您可能要使用rest arguments,然后在递归调用函数时使用spread数组



let newData,
  newArgs,
  chain = (data, ...myargs) => {
    if (myargs.length === 0) {
      return data;
    } else {
      newData = myargs[0](data);
      myargs.splice(0, 1);
      newArgs = myargs;
      chain(newData, ...newArgs);
    }
  },
  add1 = (num) => {
    return num + 1;
  };


chain(5, add1, add1, add1);

console.log(newData); // 8

10-08 17:18