参数count:获取随机数的个数
参数total:总共的个数
返回值:随机的数组
randomtimu: function (count,total){
var sequence = new Array(total)
var output = new Array(count)
for (let i = 0; i < total; i++)
{
sequence[i] = i
}
let end = total - 1
for (let i = 0; i < count; i++)
{
var num = Math.floor(Math.random() * (end + 1))
output[i] = sequence[num]
sequence[num] = sequence[end]
end--
}
return output
},
前几天我也写了一个,其实直接利用数组的去重算法即可,如果想得到一个固定元素数量的数组,再进行补位:
var
sortN =
function
(a, b) {
return
a-b;
};
var
remDupl =
function
(nums = []) {
let res = [];
let i = 0;
for
(let j = i; j < nums.length; j++) {
if
(nums[j] != nums[i]) {
i++;
nums[i] = nums[j];
}
}
res = nums.splice(0, i+1);
return
res;
}
var
randomN =
function
(len, max) {
let res = [];
while
(res.length < len) {
for
(let i = 0; i < (len-res.length); i++) {
let c = Math.floor(Math.random() * max) + 1;
res.push(c);
res.sort(sortN);
res = remDupl(res);
}
}
return
res;
}
调用函数的时候加上需要的数组长度和随机数范围即可(之前我写这段程序的目的是一个简单的彩票摇号器)
比如我需要一个5+2的随机数组合数组:
var
res1 = [];
var
res2 = [];
res1 = randomN(5, 50);
res2 = randomN(2, 12);
res = res1.concat(res2);
console.log(res);
望指点
function randomN(len,max,min=0,step=1){ var arr = Array.apply(null,{length:Math.floor((max-min)/step)}).map((value,index)=>index*step+min) var returnVal = [] for(let i=0;i<len;i++){ var ran = Math.floor(Math.random()*arr.length) returnVal.push(arr.splice(ran,1)[0]) } return returnVal } 弟弟写法留头不留尾望指点
用递归没问题吧?如果取得值和之前相同 就在自己调自己(递归) ,不相同取出来。