Node.js 具有动态参数数的NodeJS递归

Node.js 具有动态参数数的NodeJS递归,node.js,recursion,dynamicparameters,Node.js,Recursion,Dynamicparameters,我从来都不喜欢NodeJS,因此也不喜欢使用递归乘法函数。问题似乎在于,在递归中,输入参数是一个数组,然后将其分配给第一个值,而不是逐值分配。这是密码 const multiply = (factor1, ...factors) => { if (factors.length > 1){ return Math.round(factor1 * multiply(factors) * scale) / scale; } const factor2 = factors

我从来都不喜欢NodeJS,因此也不喜欢使用递归乘法函数。问题似乎在于,在递归中,输入参数是一个数组,然后将其分配给第一个值,而不是逐值分配。这是密码

const multiply = (factor1, ...factors) => {
  if (factors.length > 1){
    return Math.round(factor1 * multiply(factors) * scale) / scale;
  }
  const factor2 = factors[0];
  return Math.round(factor1 * factor2 * scale) / scale;
}
因此,调用:
multiply(1,1,1,1)
将导致:

  • 迭代:
    factor1:1,factors:[1,1,1]
  • 迭代:
    factor1:[1,1,1],因子:数组(0)

  • 在第二次迭代中,如果不检查factor1是否是一个数组,我如何实现factor1:1,factors:[1,1],问题是当您递归调用
    乘法时,您没有将每个数字作为单独的参数传递,而是传递作为数组的
    factors
    ,因此,multiply获得一个数组参数

    有两种方法可以解决此问题,或者使用

    或者可以使用调用乘法并将参数作为数组传递

     multiply.apply(null, factors)
    

    不幸的是,第二次迭代中的因子现在变成了一个数组。@fsulser抱歉,是的,我理解错了。让我更新一下……我认为第一个问题仍然会导致同样的问题。但使用apply似乎是解决方案。非常感谢。James@fsulser你试过使用扩展操作符吗?应该可以:)
     multiply.apply(null, factors)