Codewars JS任务问题:findMultiples函数无法通过测试的原因排查
问题分析与修正方案
你的代码存在两个核心问题,直接导致测试失败:
1. 全局数组引发元素累加
你将arr定义在函数外部,属于全局变量。每次调用findMultiples时,都会往同一个数组里追加元素,而非每次调用都创建全新的数组。比如第一次调用后数组是[4,8,12,16],第二次调用就会继续在后面添加新的倍数,自然出现额外元素。
2. 函数未返回结果数组
在输入有效的逻辑分支里,你仅执行了console.log(arr),但没有用return语句将数组返回。Codewars的测试用例要求函数返回指定格式的数组,而你的函数在有效输入场景下返回的是undefined,这就是报错“expected undefined to be an array”的原因。
修正后的代码
function findMultiples(integer, limit) { // 每次调用函数时创建新数组,彻底避免累加问题 const arr = []; if (integer > 0 && limit > integer) { // 简化逻辑:直接计算最大的倍数次数,无需分情况判断 const maxCount = Math.floor(limit / integer); for (let i = 1; i <= maxCount; i++) { arr.push(i * integer); } // 必须返回结果数组 return arr; } else { // 按题目输入约束,此处可返回空数组(或按需处理非法输入) return []; } }
逻辑简化说明
不用单独判断limit是否为integer的倍数,Math.floor(limit / integer)会自动取到最大的有效乘数:
- 当
limit=19、integer=4时,19/4=4.75,取整后为4,循环生成4、8、12、16; - 当
limit=20、integer=4时,20/4=5,循环生成4、8、12、16、20,完全符合需求。
内容的提问来源于stack exchange,提问作者easternbull
相关产品推荐
相关产品推荐

