JS数学函数简化后返回NaN求助:输入数字仍异常
问题原因及解决方法
问题根源
你写的subsFrom、multiBy函数都要求传入三个独立的数字参数,但调用时直接把整个input数组传了进去。比如subsFrom(input),函数会把数组当作第一个参数num1,剩下的num2、num3都是undefined,数字和undefined做运算自然会得到NaN。
divBy函数要求第一个参数是总和,后面跟三个数字,结果你传了findSum和input数组,后面三个参数实际是undefined,同样导致除法运算出NaN。
修复后的代码
// the purpose of this script is to execute different functions on an array of 3 integers// const input = [6, 25, 11]; const findSum = input.reduce((acc, num) => acc + num, 0); console.log(findSum); // each function has been assigned parameters to execute // const subsFrom = (num1, num2, num3) => num1 - num2 - num3; // 使用展开运算符...把数组拆成单个参数 const subNum = subsFrom(...input); console.log(subNum); // then call the function and display the answer // const multiBy = (num1, num2, num3) => num1 * num2 * num3; const multiNum = multiBy(...input) console.log(multiNum); const divBy = (total, num1, num2, num3) => total / num1 / num2 / num3; // 同样用展开运算符拆分input数组 const divNum = divBy(findSum, ...input); console.log(divNum);
关键说明
- 用
...input(展开运算符)可以把数组[6,25,11]拆成三个独立的参数:6,25,11,这样函数就能拿到正确的数字进行运算。 - 修复后运行,
subNum会得到6-25-11 = -30,multiNum是6*25*11=1650,divNum是42/(6*25*11)=42/1650≈0.02545。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

