我有一个数组arr [8,4,2,1,7,5,3,0]它具有8个元素。我想从数组中随机选择每个数字,这样每个数字都会被拾取,并且不会重复出现。我希望每个数字只能被选择一次。
答案 0 :(得分:1)
我会简化一下,只是有一个基本的while
循环:
const array=[8,4,2,1,7,5,3,0];
while(array.length>0) {
let i = Math.floor(Math.random() * Math.floor(array.length));
console.log(`Picked this number: ${array[i]}`);
array.splice(i,1);
};
示例输出:
// "Picked this number: 5"
// "Picked this number: 1"
// "Picked this number: 0"
// "Picked this number: 7"
// "Picked this number: 8"
// "Picked this number: 2"
// "Picked this number: 3"
// "Picked this number: 4"
Codepen:http://jsbin.com/bukoqujupo/edit?js,console
因此,所有这些操作就是对数组中元素的数量进行计数,随机选择一个,将其吐出,然后将其从数组中删除。它继续(while
)包含元素的数组。一旦选择了所有这些,它将停止运行。
答案 1 :(得分:0)
您的意思是这样的吗?
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
let arr = [8, 4, 2, 1, 7, 5, 3, 0],
selectedIndex = [];
function getRandomValue() {
let randomIndex = Math.floor(Math.random() * Math.floor(arr.length));
if (selectedIndex.indexOf(randomIndex) !== -1) {
return getRandomValue()
}
selectedIndex.push(randomIndex);
return arr[randomIndex]
}
arr.forEach(() => {
console.log(getRandomValue());
})
答案 2 :(得分:0)
一种可能的方法是...。
let numbers = [8,4,2,1,7,5,3,0];
let shuffle = (o) => {
for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
console.log(shuffle(numbers))