在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]) } }