如何从数组中选择一些随机元素?

时间:2017-01-01 22:04:16

标签: javascript arrays

var array = ["one", "two", "three", "four", "five"];
var item = array[Math.floor(Math.random()*array.length)];

上面的代码从数组中选择一个随机项。但是,我怎么能让它一次从数组中选择3个随机元素,而不是只有一个。

不是仅选择three,而应该是two five one

2 个答案:

答案 0 :(得分:3)

您可以shuffle() array然后获取您需要的第一个X项目:



var array = ["one", "two", "three", "four", "five"];
var n = 3;
function shuffle(a) {
    for (let i = a.length; i; i--) {
        let j = Math.floor(Math.random() * i);
        [a[i - 1], a[j]] = [a[j], a[i - 1]];
    }
}
shuffle(array)
console.log(array.slice(0, 3))




随机播放功能来自这个问题:How can I shuffle an array?

如果您仍需要原始array,则可以使用slice



var array = ["one", "two", "three", "four", "five"];
var n = 3;
function shuffle(a) {
    for (let i = a.length; i; i--) {
        let j = Math.floor(Math.random() * i);
        [a[i - 1], a[j]] = [a[j], a[i - 1]];
    }
}
array_tmp = array.slice(0)
shuffle(array_tmp)
console.log(array_tmp.slice(0, 3))
console.log(array)




答案 1 :(得分:3)

您可以使用虚拟数组进行计数和数组的副本,并在不对数组进行混洗的情况下拼接随机项。



var array = ["one", "two", "three", "four", "five"],
    result = array.slice(0, 3).map(function () { 
        return this.splice(Math.floor(Math.random() * this.length), 1)[0];
    }, array.slice());

console.log(result);