0

我从不使用 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: 1, factors: [1,1]在不检查 factor1 是否为数组的情况下,如何在第二次迭代中实现?

4

1 回答 1

1

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

解决此问题的两种方法,一种是使用扩展语法

 multiply(...factors)

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

 multiply.apply(null, factors)
于 2019-11-08T10:52:51.280 回答