具有动态参数数量的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)
导致:
- 迭代:
factor1: 1, factors: [1,1,1]
- 迭代:
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)
我从来没有接触过 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], factors: Array(0)
如何在不检查 factor1 是否为数组的情况下在第二次迭代 factor1: 1, factors: [1,1]
中实现?
问题是当你递归调用 multiply
时,你没有将每个数字作为单独的参数传递,你传递的是数组 factors
,因此 multiply 得到一个数组参数。
有两种解决方法,要么使用 spread syntax
multiply(...factors)
或者您可以使用 apply 调用 multiply 并将参数作为数组传递
multiply.apply(null, factors)