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

新手上路,请多包涵

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

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

但是在这种情况下,我们只能从数组中选择一项。如果我们想要多个元素,那么我们该如何实现呢?我们如何从一个数组中获取多个元素?

原文由 Shyam Dixit 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 549
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;
}

原文由 Bergi 发布,翻译遵循 CC BY-SA 4.0 许可协议

const items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'I', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 1, 2, 3, 4, 5];

const fetchRandomArray = ({pool=[], limit=1})=>{
let query = []
let selectedIndices = {}

while(query.length < limit){
    const index = Math.floor(Math.random()*pool.length)
    if(typeof(selectedIndices[index])==='undefined'){
        query.push(items[index])
        selectedIndices[index] = index
    }
}

console.log(fetchRandomArray({pool:items, limit:10})

原文由 Solomon Gbadamosi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题