📅  最后修改于: 2023-12-03 15:31:40.925000             🧑  作者: Mango
在 JavaScript 中,有时我们需要从一个数组中随机选择 n 个元素。本文将介绍几种实现方式。
使用 Math.random() 函数可以生成一个 0 到 1 之间的随机小数,我们可以将其乘以数组长度,取整后得到一个随机的数组下标,不断重复这个过程,直到选择了 n 个元素。
function getRandomArrayElements(arr, n) {
const result = new Array(n);
let len = arr.length;
const taken = new Array(len);
while (n--) {
const x = Math.floor(Math.random() * len);
result[n] = arr[x in taken ? taken[x] : x];
taken[x] = --len;
}
return result;
}
lodash 是一个 JavaScript 工具库,提供了很多数组操作的方法,其中包含了一个 sampleSize() 方法,可以从一个数组中随机选择 n 个元素。
const _ = require('lodash');
_.sampleSize([1, 2, 3, 4, 5], 3); // [3, 1, 2]
我们还可以先使用数组排序,然后选择前 n 个元素。数组排序可以使用 sort() 方法,可以自定义排序规则。这里我们使用 Math.random() 函数生成一个随机数来作为排序规则,然后选择前 n 个元素。
function getRandomArrayElements(arr, n) {
arr.sort(() => Math.random() - 0.5);
return arr.slice(0, n);
}
以上就是几种实现从数组中随机选择 n 个元素的方式。