我正在尝试在ES6中生成随机数数组-不应重复数字。
当前,我的函数生成一个随机数数组,但它们在重复:
winArray = [...Array(6)].map(() => Math.floor(Math.random() * 53));
这是我发现的非ES6解决方案: Non-ES6 solution
此带有Set的解决方案未在for循环中运行:
for (let i = 1; i <= draws; i += 1) {
// Generating a random array of 6 number
const winArray = new Set();
while (winArray.size < 6) winArray.add(Math.floor(Math.random() * 53));
}
答案 0 :(得分:6)
您可以使用Set
并填充此集合,直到所需大小为止。
var numbers = new Set;
while (numbers.size < 6) numbers.add(Math.floor(Math.random() * 53));
console.log(...numbers);
要获得更多的数字集合,您可以为每个平局设置一个空集合。
var numbers,
draws = 5,
i;
for (i = 0; i < draws; i++) {
numbers = new Set;
while (numbers.size < 6) numbers.add(Math.floor(Math.random() * 53));
console.log(...numbers);
}
答案 1 :(得分:2)
Set仅允许唯一的属性(不允许重复)。
let winArray = [...Array(6)].map(() => Math.floor(Math.random() * 53));
winArray = [...new Set(winArray)]
console.log(winArray)
答案 2 :(得分:0)
这是一种解决方案,可以洗改唯一编号列表(永远不会重复)。
for (var a=[],i=0;i<100;++i) a[i]=i;
function shuffle(array) {
var tmp, current, top = array.length;
if(top) while(--top) {
current = Math.floor(Math.random() * (top + 1));
tmp = array[current];
array[current] = array[top];
array[top] = tmp;
}
return array;
}
a = shuffle(a);