📌  相关文章
📜  从数组 javascript 中获取 n 个随机项(1)

📅  最后修改于: 2023-12-03 15:36:18.539000             🧑  作者: Mango

从数组 JavaScript 中获取 n 个随机项

在 JavaScript 中,有时候我们需要从一个数组中随机获取几项数据,比如在抽奖程序中随机选取获奖人员,或生成一些随机的测试数据。本文将介绍如何使用 JavaScript 快速从数组中获取 n 个随机项。

随机算法

在介绍具体实现之前,我们需要了解一下随机算法的原理。JavaScript 提供了 Math.random() 函数用于生成一个 0 到 1 之间的随机小数。我们可以通过乘法、加法等方式对这个随机小数进行处理,得到不同的随机数。下面是一个常用的生成整数的方法,得到的随机数范围是[min, max]:

function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
获取 n 个随机项

知道了随机算法原理后,我们就可以快速地从数组中获取 n 个随机项。下面是两种常用的方式:

1. 使用循环随机获取

首先需要创建一个存放随机项的数组,然后使用循环遍历原数组,每次从中随机获取一个元素,如果获取的元素已被选择,则忽略,否则添加到新数组中。循环直到新数组长度等于 n,然后返回新数组。

function getRandomItems(arr, n) {
  const randomItems = [];
  while (randomItems.length < n) {
    const randomIndex = getRandomInt(0, arr.length - 1);
    const randomItem = arr[randomIndex];
    if (!randomItems.includes(randomItem)) {
      randomItems.push(randomItem);
    }
  }
  return randomItems;
}
2. 使用 shuffle 方法

另外一种方法是打乱原数组顺序,然后返回前 n 个元素。这种方法比较简单,直接使用 Fisher-Yates Shuffle 算法将数组元素顺序打乱即可。打乱后返回数组的前 n 个元素。

function getRandomItems(arr, n) {
  const shuffledArr = [...arr];
  for (let i = shuffledArr.length - 1; i > 0; i--) {
    const j = getRandomInt(0, i);
    [shuffledArr[i], shuffledArr[j]] = [shuffledArr[j], shuffledArr[i]];
  }
  return shuffledArr.slice(0, n);
}
总结

本文介绍了 JavaScript 中如何从数组中获取 n 个随机项。我们了解了随机算法的原理,然后通过循环和 shuffle 两种方式实现了从数组中获取 n 个随机项的代码。这些方法可以在抽奖、测试数据生成,以及其他随机需求中使用。