You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:52:12