每次生成一个随机数,再判断生成的随机数,是否存在于已经生成的随机数群组中,如果存在,则重复执行生成随机数这个动作。
这样就可以保证生成的随机数没有重复。而且位置也没有一定的规律。
我查了下手册,还有一个更简单的方法就是使用函数:shuffle( array &array )
该函数的作用是随机打乱一个数组。
这样就简单了,你先生成一个数组(1-100),然后使用此函数将数组随机打乱,这样就生成了无重复的随机数组。
以下代码亲测可行。
<?php
$numbers = range(1,100)//生成1-100之间的数组。
srand((float)microtime()*1000000)//建立随机种子
shuffle($numbers)//打乱数组
$i=0//换行标记
foreach ($numbers as $number) {//遍历数组
$i++//标记自增
echo "$number "//输出数值
if($i %10==0) echo "<br>"//如果输出10个则换行。
}
?>
MD写完了,发现你问的是JS的,我回答的是PHP的,不过方法1是通用的。JS中不知道有没有这样的函数。
用查找数组去重复的效率极低,应该用Object或者JS2015的Set对象做
const s = new Set()while(s.size<10)
s.add(parseInt(Math.random()*10))
console.log(s) Set { 2, 7, 0, 4, 9, 3, 6, 1, 8, 5 }
读下来你的代码,好像在写随机一共10以内10个数还要去重。就可能不是要为了去重,而是想数组洗牌,就该用常见的算法。
function shuffleArray(a) {for(var i=a.length-1 i>0 i--) {
var j = Math.floor(Math.random() * (i + 1))
var t= a[i] a[i] = a[j] a[j] = t
}
}
const a=[]
for(var i=0i<10i++) a.push(i)
shuffleArray(a)
console.log(a) [ 0, 6, 7, 8, 3, 5, 1, 2, 4, 9 ]