JavaScript 随机选择元素并避免重复 - 完整代码示例

在 JavaScript 中,您可以使用 Math.random()Math.floor() 函数来生成随机数并选择数组中的随机元素。但是,如果您需要多次从数组中选择元素,并确保每次选择的元素都不重复,则需要一些额外的逻辑。

以下代码示例演示了如何实现这种功能:

const options = ['apple', 'banana', 'orange', 'kiwi', 'grape'];
const usedIndexes = []; // 记录已经出现过的随机数

function randomSelect() {
  if (usedIndexes.length === options.length) {
    usedIndexes.length = 0; // 清空数组
  }
  const randomIndex = Math.floor(Math.random() * options.length);
  if (usedIndexes.includes(randomIndex)) {
    return randomSelect(); // 继续生成随机数
  } else {
    usedIndexes.push(randomIndex);
    return options[randomIndex];
  }
}

// 以下代码展示如何重复使用 randomSelect 函数并避免重复
function randomSelection() {
  // ... 和上一段代码相同

  // 返回下一个随机选项
  return randomSelect();
}

console.log(randomSelection()); // 输出一个随机选项
console.log(randomSelection()); // 输出另一个随机选项
// ... 继续输出更多随机选项

代码解释

  1. options 数组:包含要随机选择的元素。
  2. usedIndexes 数组:用于记录已经出现的随机索引,以避免重复选择。
  3. randomSelect() 函数
    • 检查 usedIndexes 数组是否已包含所有元素的索引。如果是,则清空 usedIndexes 数组,以便重新开始选择。
    • 生成一个随机索引 randomIndex
    • 检查 randomIndex 是否已经在 usedIndexes 数组中。如果是,则递归调用 randomSelect() 函数,继续生成随机数直到找到一个未使用的索引。
    • 如果 randomIndex 是一个未使用的索引,则将其添加到 usedIndexes 数组中,并返回 options 数组中对应索引的元素。
  4. randomSelection() 函数
    • 调用 randomSelect() 函数获取下一个随机选项。
    • 返回 randomSelect() 函数的结果。

如何使用

您可以多次调用 randomSelection() 函数,每次调用都会返回一个随机选择的元素,而且不会出现重复。

注意

  • 该方法假设 options 数组中没有重复元素。
  • 如果 options 数组为空,则 randomSelect() 函数会无限递归调用,并导致堆栈溢出。

希望此代码示例和解释能够帮助您理解如何在 JavaScript 中随机选择元素并避免重复。

JavaScript 随机选择元素并避免重复 - 完整代码示例

原文地址: https://www.cveoy.top/t/topic/nsdv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录