从集合中生成随机数,以便使用javascript

时间:2018-07-03 13:40:54

标签: javascript

我有一个数组arr [8,4,2,1,7,5,3,0]它具有8个元素。我想从数组中随机选择每个数字,这样每个数字都会被拾取,并且不会重复出现。我希望每个数字只能被选择一次。

3 个答案:

答案 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))