
本文详解 findMultiples(integer, limit) 函数的常见错误与正确写法,重点解决因全局数组变量导致的测试失败问题,并提供简洁、健壮、符合题意的 JavaScript 实现方案。
本文详解 `findmultiples(integer, limit)` 函数的常见错误与正确写法,重点解决因全局数组变量导致的测试失败问题,并提供简洁、健壮、符合题意的 javascript 实现方案。
在 Codewars 的 JavaScript 题目 “Find Multiples of a Number” 中,要求实现一个函数:接收两个正整数 integer(基数)和 limit(上限),返回从 integer 开始、不超过 limit 的所有该基数的倍数(含 limit 自身,若其恰好为倍数)。例如 findMultiples(2, 6) 应返回 [2, 4, 6]。
你原始代码的核心问题在于将数组 arr 声明在函数外部(全局作用域):
const arr = []; // ❌ 全局变量 —— 多次调用会持续累积结果!
function findMultiples(integer, limit) {
// ...
arr.push(...); // 每次都往同一个数组里加元素
return arr; // 返回的是被污染的全局数组
}
这导致连续测试(如 findMultiples(4,19) → findMultiples(5,25) → findMultiples(1,8))时,arr 不断追加新数据,最终输出类似 [4,8,12,16,5,10,15,20,25,1,2,3,4,5,6,7,8] 的混合结果——而题目期望每次调用都返回全新、独立的数组。
✅ 正确做法是:在函数内部声明并初始化数组,确保作用域隔离与状态纯净:
function findMultiples(integer, limit) {
const result = []; // ✅ 每次调用都创建新数组
// 根据题设,输入恒为正整数且 limit > integer,可简化逻辑
for (let i = integer; i <p>这段代码更简洁、易读,且完全避免了取余判断:直接从 integer 开始,每次递增 integer,直到超过 limit 为止。它天然满足「包含 limit(若其为倍数)」的要求。</p><p>⚠️ 注意事项:</p>
- 不要使用全局变量存储中间结果;
- 不必手动计算倍数个数或处理余数——循环累加更直观可靠;
- 题目已保证输入为正整数且 limit > integer,无需额外校验;
- 必须 return 数组;仅 console.log() 不会通过测试(Codewars 检查返回值而非打印内容)。
✅ 最终推荐版本(健壮、简洁、符合规范):
function findMultiples(integer, limit) {
const multiples = [];
for (let n = integer; n <p>此实现通过全部测试,时间复杂度 O(n/integer),空间复杂度 O(n/integer),逻辑清晰,无副作用,是解决该题的标准范式。</p>










