为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

我正在研究“如何从javascript中的数组随机访问元素”。我发现了许多与此有关的链接。像: 从JavaScript数组中获取随机项目var item = items[Math.floor(Math.random()*items.length)];问题:但是在这种情况下,我们只能从数组中选择一项,如果我们想要多个元素,那么我们将如何实现这一点,所以请仅从该语句中获取一个数组中的多个元素。
查看完整描述

3 回答

?
弑天下

TA贡献1818条经验 获得超7个赞

尝试以下无损(快速)功能:


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;

}


查看完整回答
反对 回复 2019-12-27
?
慕勒3428872

TA贡献1848条经验 获得超5个赞

仅两行:


// 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);


查看完整回答
反对 回复 2019-12-27
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

创建一个可以做到这一点的功能:


var getMeRandomElements = function(sourceArray, neededElements) {

    var result = [];

    for (var i = 0; i < neededElements; i++) {

        result.push(sourceArray[Math.floor(Math.random()*sourceArray.length)]);

    }

    return result;

}

您还应该检查sourceArray是否有足够的元素要返回。如果要返回唯一元素,则应从sourceArray中删除选定的元素。


查看完整回答
反对 回复 2019-12-27
  • 3 回答
  • 0 关注
  • 1063 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信