具有动态参数数量的NodeJS递归

NodeJS recursion with dynamic number of parameters

我从来没有接触过 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) 导致:

  1. 迭代: factor1: 1, factors: [1,1,1]
  2. 迭代: factor1: [1,1,1], factors: Array(0)

如何在不检查 factor1 是否为数组的情况下在第二次迭代 factor1: 1, factors: [1,1] 中实现?

问题是当你递归调用 multiply 时,你没有将每个数字作为单独的参数传递,你传递的是数组 factors,因此 multiply 得到一个数组参数。

有两种解决方法,要么使用 spread syntax

 multiply(...factors)

或者您可以使用 apply 调用 multiply 并将参数作为数组传递

 multiply.apply(null, factors)