求:js随机生成0-51之间30个不同的数字
谢谢!
[解决办法]
for(i=0; i<30; i++) {
document.write(Math.floor(Math.random()*52) + '<br>');
}
function getDifNum(num,minNum,maxNum){
var res = [],
i=0,
len,
flag=false,
btn;
if(typeof maxNum != "number"){
maxNum = minNum;
minNum = 0;
}
if(maxNum <= minNum){
return;
}
btn = maxNum - minNum;
if(num >= btn){
return;
}else if(num > Math.ceil(btn/2)){
num = btn - num;
flag = true;
}
res = getRandArr(num,minNum,maxNum);
function getArr(num){
var arr = [],
i=0;
for(;i<num;i++){
arr[i] = i;
}
return arr;
}
function getRandArr(num,min,max){
var arr = [];
for(var i = 0;i<num;i++){
arr[i] = getRandNum(min,max);
}
return arr;
}
function getRandNum(min,max){
return Math.round(Math.random()*(max-min) + min)
}
function deleSame(arr){
var i=0;
arr.sort();
for(;i<arr.length;i++){
if(arr[i] == arr[i+1]){
arr.splice(i,1);
i--;
}
}
return arr;
}
function getOther(btn,arr){
var i=0,
len = arr.length;
var arr2 = getArr(btn),
btn = btn - arr.length;
for(i=0;i<len;i++){
arr2[arr[i]] = -1;
}
for(i=arr2.length-1;i>=0;i--){
if(arr2[i] == -1){
arr2.splice(i,1);
}
}
if(arr2.length > btn){
arr2 = arr2.slice(0,btn);
}
return arr2;
}
function checkInArr(num,arr){
for(var i=0,len=arr.length;i<len;i++){
if(arr[i] == num){
return true;
}
}
return false;
}
res = deleSame(res);
while(res.length < num){
var ran = getRandNum(minNum,maxNum);
if(!checkInArr(ran,res)){
res.push(ran);
};
}
if(res.length > num){
res = res.slice(0,num);
}
if(!flag){
return res;
}else{
return getOther(btn,res);
}
}
console.log(getDifNum(20,0,52));
var a = [];
for(var i = 0; i < 51; i++){
a.push(i);
}
a.sort(function(){return 0.5 - Math.random()});
a.length = 30;
console.log(a)
var a = [];
for(var i = 0; i < 51; i++){
a.push(i);
}
function shuffle(obj,num){
var rand;
var index = 0;
var shuffled = [];
var i=0,len=obj.length;
if(typeof num =='undefined'){
num = len;
}
for(i;i<len&&i<num;i++){
rand = random(index++);
shuffled[index - 1] = shuffled[rand];
shuffled[rand] = obj[i];
}
return shuffled;
}
function random(min, max) {
if (max == null) {
max = min;
min = 0;
}
return min + Math.floor(Math.random() * (max - min + 1));
}
var $a = shuffle(a,30);
var a = [];
for ( var i = 0; i < 51; i++) {
a.push(i);
}
var i=0;
a.sort(function() {
i++
return 0.5 - Math.random()
});
a.length = 30;
var $a = i;