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

如何用Do...while循环生成1-50无重复随机数组?JS彩票生成遇去重问题

修复JavaScript彩票号码生成器的重复数字问题

你的代码核心问题是先把生成的数字添加到数组,再判断是否重复——这时候数组里已经有这个数字了,!lottoNumbers.includes(num)永远为false,去重逻辑完全失效,自然会出现重复数字。

修正后的基础版本

调整逻辑,先判断数字是否存在,仅当不存在时才添加到数组,同时把排序操作移到循环结束后(避免重复排序浪费性能):

const randomNumber = (minRange, maxRange) => {
    return Math.floor(Math.random() * (maxRange - minRange + 1) + minRange);
};

let lottoNumbers = [];
let num = 0;

do {
    num = randomNumber(1, 50);
    // 仅当数组中没有当前数字时,才添加进去
    if (!lottoNumbers.includes(num)) {
        lottoNumbers.push(num);
    }
} while (lottoNumbers.length < 5);

// 循环结束后统一排序
lottoNumbers.sort((a, b) => a - b);
console.log(lottoNumbers);

更简洁的优化方案(利用Set自动去重)

JavaScript的Set结构天然不允许重复值,用它来实现去重会更简洁高效,尤其适合生成数量较多的号码时:

const randomNumber = (minRange, maxRange) => {
    return Math.floor(Math.random() * (maxRange - minRange + 1) + minRange);
};

const lottoSet = new Set();
// 直到Set中有5个不重复的数字
while (lottoSet.size < 5) {
    lottoSet.add(randomNumber(1, 50));
}

// 将Set转为数组并排序
const sortedLottoNumbers = Array.from(lottoSet).sort((a, b) => a - b);
console.log(sortedLottoNumbers);

内容的提问来源于stack exchange,提问作者Pedro Arévalo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:51:16