技术问询:如何批量向数组添加同一元素及硬币找零函数调试
问题解答
问题一:一次性向数组中多次添加同一个元素
这里有几种简洁高效的方法可以实现:
方法一:
Array.fill()+ 扩展运算符
如果是往已有数组里添加n个相同元素,可以先创建一个包含n个目标元素的临时数组,再用扩展运算符展开后push到原数组:const arr = [1, 2]; const element = 3; const times = 4; arr.push(...new Array(times).fill(element)); // 现在arr变成 [1, 2, 3, 3, 3, 3]方法二:
Array.from()Array.from可以通过指定长度和映射函数生成数组,同样配合扩展运算符添加:const arr = [1, 2]; const element = 3; const times = 4; arr.push(...Array.from({length: times}, () => element)); // 结果同上方法三:直接生成新数组
如果不需要基于原数组,而是直接创建包含多个相同元素的数组,直接用fill即可:const arr = new Array(5).fill('apple'); // arr是 ['apple', 'apple', 'apple', 'apple', 'apple']
问题二:实现硬币找零函数
先分析你遇到的两个问题:
- 无法显示多个相同硬币:核心是没计算当前硬币能使用的次数,只处理了单次;
- 无法移除0值:是因为当硬币数量为0时错误地添加了无效值,只要判断数量大于0再添加即可。
这里是修正并完善后的代码,完全解决你的问题:
function getCoins() { const coins = [25, 10, 5, 1]; // 把输入的字符串转成数字,避免后续计算出错 let amount = Number(prompt("Enter an amount to convert into coins")); const result = []; for (const coin of coins) { // 计算当前硬币最多能使用多少次(向下取整) const coinCount = Math.floor(amount / coin); if (coinCount > 0) { // 一次性添加coinCount个当前硬币到结果数组 result.push(...new Array(coinCount).fill(coin)); // 更新剩余需要找零的金额 amount = amount % coin; } // 如果剩余金额为0,提前退出循环,提升效率 if (amount === 0) break; } console.log(result); return result; }
关键修复点说明:
- 解决多硬币显示问题:用
Math.floor(amount / coin)得到当前硬币的使用次数,再通过new Array(coinCount).fill(coin)生成对应数量的硬币数组,用扩展运算符一次性加入结果数组,这样就能出现多个相同硬币(比如输入56时,25会被计算2次,所以添加两个25); - 解决0值问题:只有当
coinCount > 0时才执行添加操作,彻底避免0值混入结果;同时每次更新剩余金额为amount % coin,当金额清零后提前终止循环,减少不必要的计算。
内容的提问来源于stack exchange,提问作者Chi Lee
相关产品推荐
相关产品推荐

