有一个数组
var a = [
[0, 1],
[2, 3],
[4, 5],
[6, 7]
];
如何实现更均匀随机取里面的 2 到 3 个数字(取到的数字上下左右不相邻)?
之前自己倒腾了一个,但是感觉代码写的太臃肿,而且去到的数也不平均,各位大神帮忙看看能不能优化一下,谢谢!
function select() {
var arr = [
[0, 1],
[2, 3],
[4, 5],
[6, 7]
];
var lastSelect = -1;
for (var i = 0; i < arr.length; i++) {
var index = getRandomNumber(lastSelect, arr[i].length);
console.log(arr[i][index]);
lastSelect = index;
}
}
function getRandomNumber(lastSelect, max) {
var random = Math.floor(Math.random() * max);
if (random == lastSelect) return getRandomNumber(lastSelect, max);
else return random;
}
select()
1
codehz 2017-05-29 13:46:28 +08:00
首先定义随机。。。。
然后把所有可能的排列写出来。。。。 随机取其中的一个。。。。 问题解决 |
2
lrz0lrz 2017-05-29 15:19:08 +08:00 1
你更想要的是均匀而不是随机吧?
|
5
slucus OP 现在随机数是取出来了,但是取到的值并不理想:只能取到两组值,1256、0347。像 0 和 6 永远都不会出现在一组里,所以这样取到的数据是有缺陷的,在很多平台都提问过,但各位大神给的答案都不是很理想。。哎╮(╯▽╰)╭
|
6
slucus OP 已经找到更优的方案,谢谢大家!
var a = [ [0, 1], [2, 3], [4, 5], [6, 7] ]; function select() { var random = Math.round(Math.random()); for (var i = 0; i < a.length; i++) { console.log(a[i][(i + Math.round(Math.random())) % 2]); } } select() |