
本文详解如何编写一个函数,接收正整数 integer 和上限 limit,返回从 integer 开始、不超过 limit 的所有其正整数倍组成的数组(含 limit 本身,若其为倍数)。重点解决因变量作用域不当导致的测试失败问题。
本文详解如何编写一个函数,接收正整数 `integer` 和上限 `limit`,返回从 `integer` 开始、不超过 `limit` 的所有其正整数倍组成的数组(含 `limit` 本身,若其为倍数)。重点解决因变量作用域不当导致的测试失败问题。
在 Codewars 等编程练习平台中,函数需具备纯函数特性:每次调用都应独立计算、独立返回结果,不依赖也不污染外部状态。你原始代码中的核心问题在于将数组 arr 声明在函数外部(全局作用域):
const arr = []; // ❌ 全局变量 —— 多次调用会持续累积数据!
function findMultiples(integer, limit) {
// ... 推入元素到 arr
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 = []; // ✅ 每次调用都创建新数组
// 遍历 1 到最大可能的倍数系数 k,满足 k * integer <p>该写法更简洁、可读性强,且天然避免了取余判断逻辑——直接用 i * integer </p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill3430" title="Alibabacloud Sdk Client Initialization For Java"><img
src="https://img.php.cn/upload/skill/000/000/081/178955835420587.jpg" alt="Alibabacloud Sdk Client Initialization For Java" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill3430" title="Alibabacloud Sdk Client Initialization For Java" class="overflowclass">Alibabacloud Sdk Client Initialization For Java</a>
<p class="overflowclass">在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。</p>
</div>
<a rel="nofollow" href="/xiazai/skill3430" title="Alibabacloud Sdk Client Initialization For Java" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div><p>? <strong>关键注意事项:</strong> </p>
- 不要使用全局或闭包外的变量存储中间结果;
- 函数必须 return 数组,不能仅 console.log;
- 题目保证输入为正整数且 limit > integer > 0,无需额外校验 0 或负数;
- for 循环条件 i * integer
✅ 最终推荐实现(健壮、简洁、符合测试要求):
function findMultiples(integer, limit) {
const multiples = [];
for (let i = 1; i * integer <p>调用示例:</p><pre class="brush:php;toolbar:false;">console.log(findMultiples(2, 6)); // [2, 4, 6]
console.log(findMultiples(4, 19)); // [4, 8, 12, 16]
console.log(findMultiples(1, 8)); // [1, 2, 3, 4, 5, 6, 7, 8]总结:编写算法函数时,作用域意识比算法逻辑更重要。一个看似微小的变量声明位置错误,会导致整个测试链路崩溃。始终让数据生命周期与函数调用周期严格对齐——这是写出可靠、可复用代码的第一步。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










