JavaScript编写求数字因数存入数组的函数返回错误,如何修复?
代码问题排查与实现方案
现有代码错误点
- 提前终止函数执行:你在
if分支内写了return factorNumbers.push(i),首先push()方法的返回值是数组新增元素后的长度,同时return会直接中断函数运行,第一次找到因数就停止遍历,既不会继续查找其余因数,也不会返回完整的因数数组。 - 循环变量污染全局作用域:
for(i = 1; i < numbers; i++)中的i没有声明,会自动成为全局变量,可能影响其他代码逻辑。 - 无最终返回值:循环正常执行结束后,没有返回收集好的因数数组,函数默认返回
undefined。 - 函数命名语义模糊:原函数名
findNumbers无法体现查找因数的功能,建议调整为findFactors提升可读性。
修正后的因数查找函数
function findFactors(number) { let factorNumbers = []; // 声明局部循环变量 for(let i = 1; i < number; i++) { if(number % i === 0) { factorNumbers.push(i); } } // 循环结束后返回完整因数数组 return factorNumbers; }
完美数判断逻辑实现
你需要实现的「所有因数之和减去数字本身等于该数字」的判断,对应数学中的完美数判定,实现代码如下:
function isPerfectNumber(num) { // 小于2的数不可能是完美数,提前判断优化性能 if(num < 2) return false; const factors = findFactors(num); const sum = factors.reduce((total, curr) => total + curr, 0); return sum === num; }
内容的提问来源于stack exchange,提问作者Ivan Cheng
相关产品推荐
相关产品推荐

