如何用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
相关产品推荐
相关产品推荐

