javascript 为什么唯一的号码还没来?

4bbkushb  于 2023-02-11  发布在  Java
关注(0)|答案(2)|浏览(95)

我需要生成唯一的数字,用字母连接它,然后推到数组中。

arr = []
for (var i = 0; i < 5; i++) {
  function generateRandomNumber(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
  }
  var randomNum = generateRandomNumber(1, 15);
  if (!arr.includes(randomNum)) {
    arr.push('B' + randomNum.toString())
  } else {
    if (arr.length < 5) {
      return generateRandomNumber(min, max)
    } else break
  }
}

我已经设置了唯一性检查,但是仍然会出现相同的值。

y1aodyip

y1aodyip1#

我已经设置了唯一性检查,但是仍然会出现相同的值。
唯一性检查不正确
当唯一性检查搜索数字时,数组只包含以字母'B'开头的字符串(由行arr.push('B' + randomNum.toString())添加)。
调用arr.includes(randomNum)总是返回falserandomNum的每个生成值都以'B'为前缀,并被推送到数组中,无论数组包含什么。
尝试一种更简单的方法:生成数字,如果它们还没有出现,则将它们添加到列表中,当列表足够大时停止(五个项目)。
然后遍历列表,并为每个项添加前缀'B'
就像这样:

function generateRandomNumber(min, max) {
  return Math.floor(Math.random() * (max - min + 1) + min);
}

// Generate 5 unique random numbers between 1 and 15
let arr = []
while (arr.length < 5) {
  let num = generateRandomNumber(1, 15);
  // Ignore a value that has already been generated
  if (!arr.includes(num)) {
    arr.push(num);
  }
}

// Add the 'B' prefix to the generated numbers
arr = arr.map((num) => `B${num}`);

console.log(arr);
sg24os4d

sg24os4d2#

条件在循环中只检查一次。另外,如果条件处于else状态,则有可能出现与之前相同的编号。您可以使用此方法

let arr = []
function generateRandomNumber(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}

function add(){
  var randomNum = generateRandomNumber(1, 15);
    if(arr.length < 5){
        if (!arr.includes('B' + randomNum.toString())) {
            arr.push('B' + randomNum.toString())
        }
        add()
    }
  
}
add()
console.log(arr)

相关问题