var array = ["one", "two", "three", "four", "five"];
var item = array[Math.floor(Math.random()*array.length)];
上面的代码从数组中选择一个随机项。但是,我怎么能让它一次从数组中选择3个随机元素,而不是只有一个。
不是仅选择three
,而应该是two five one
。
答案 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);