如何选择不在此数组中的随机值(0到30)?
var list = new Array(1,3,4,7,8,9);
答案 0 :(得分:6)
构建互补数组并从中选择随机值。
var list2 = new Array();
for(var i=0; i<30; i++)
if(!list.contains(i))
list2.push(i);
然后:
var rand = list2[Math.floor(Math.random() * list2.length)];
答案 1 :(得分:1)
假设您的列表大小合理,请创建一个不在数组中的数字列表,然后随机选择该数组中的数字。
答案 2 :(得分:1)
function RandomValueNotInArray(array)
{
var e;
do
{
e = Math.random() * 31; // n + 1
} while (array.contains(e))
return e;
}
答案 3 :(得分:1)
您需要一个while
循环来测试rand
数组中是否有restricted
,如果是,则重新生成一个新的随机数:
var rand;
do {
rand = Math.floor(Math.random() * 31); // re-randomize, 0 to 30 inclusive
} while ($.inArray(rand, restricted) > -1);
return rand;
http://jsfiddle.net/mblase75/dAN8R/
不想要jQuery?如果您使用restricted.indexOf(rand)
,则可以将$.inArray(rand, restricted)
替换为this polyfill for old browsers。
答案 4 :(得分:0)
我可能会创建一个数组或链表,我会从中减去不需要的项目。这样我可以继续删除项目,只需从位置0到数组的长度随机选择项目 - 1而不必选择相同的两次。
另一种方法是随机化0到30之间的数字,并在数组中找到它时继续执行。唯一的问题是知道数组何时已满(以摆脱无限循环)并且处理器密集程度更高。
答案 5 :(得分:0)
您可以使用filter。
var filteredArray = list.filter(function(e){
return e!= Math.floor(Math.random() * (31));
});
答案 6 :(得分:0)
一些递归功能:
getNum() {
let randomNum = Math.floor(Math.random() * (30 - 1)) + 1
if (list.includes(randomNum)) {
return getNum()
}
return randomNum
}
可能会快一点,因为它首先尝试返回一个随机数,然后检查它是否在数组中。
答案 7 :(得分:-1)
PHP分为两行:
$result = array_diff(range(1,30), array(1,3,4,7,8,9));
echo $result[array_rand($result)];