在start~end之间生成n个不重复整数数组
方法一
创建一个start到end的数组,随机的去除数组的下标,将其对应的值取出,如此反复,这样就可以实现永不重复。
function fn(n,start,end){
var arr = [];
let result = [];
for(let i=0;i<=(end-start);i++){
arr[i] = start+i;
}
for(let j=0;j<n;j++){
let len = arr.length;
let index = Math.floor(Math.random()*len);
result.push(arr[index]);
arr.splice(index,1)
}
return result
}
方法二
改进方法一种的splice,从数组中取出一个数,然后让该位置置为null,下一次取时判断是否为空
function fn(n,start,end){
var arr = [];
let result = [];
for(let i=0;i<=(end-start);i++){
arr[i] = start+i;
}
for(let j=0;j<n;j++){
let len = arr.length;
let index
do{
index= Math.floor(Math.random()*len);
}while(arr[index]==null)
result.push(arr[index])
arr[index] = null;
}
}
方法三
把原数组打散,然后依次取出,这样也不会重复
function fn(n,start,end){
var arr = [];
let result = [];
for(let i=0;i<=(end-start);i++){
arr[i] = start+i;
}
arr.sort(function(){
return 0.5-Math.random()
})
for(let j=0;j<n;j++){
result.push(arr[j])
}
}