如何从数组中获取许多随机元素?

2022-08-30 02:06:19

我正在研究“如何从javascript中的数组中随机访问元素”。我发现了许多关于此的链接。喜欢:从JavaScript数组中获取随机项目

var item = items[Math.floor(Math.random()*items.length)];

但在这里,我们只能从数组中选择一个项目。如果我们想要一个以上的元素,那么我们如何实现这一目标呢?我们如何从数组中获取多个元素?


答案 1

只需两行:

// Shuffle array
const shuffled = array.sort(() => 0.5 - Math.random());

// Get sub-array of first n elements after shuffled
let selected = shuffled.slice(0, n);

演示


答案 2

试试这个非破坏性(和快速)功能:

function getRandom(arr, n) {
    var result = new Array(n),
        len = arr.length,
        taken = new Array(len);
    if (n > len)
        throw new RangeError("getRandom: more elements taken than available");
    while (n--) {
        var x = Math.floor(Math.random() * len);
        result[n] = arr[x in taken ? taken[x] : x];
        taken[x] = --len in taken ? taken[len] : len;
    }
    return result;
}