js取随机数去重复再取

MrBuEr 2018-01-23 11:44:00

各位好,在网上学习了一个取随机数的方法,但是取出来会有重复的数字,所以想大家帮我改一下,能不能实现去了重复,再重新取过?就是这个功能,代码如图所示,谢谢大家了,
...全文
1132 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
roffer 2018-01-29
  • 打赏
  • 举报
回复

/**
     * 获取不重复的随机数
     * @param count:生成随机数个数
     * @param range:数值范围
     */
    function getRandom(count,range){
        count = count || 1,
        range = range || [1,count + 1];

        min = range[0],
        max = range[1];

        unique = arguments[2] || {},
        result = arguments[3] || [];

        var num = Math.floor(Math.random() * (max - min) + min);
        if(result.length < count){
            if(!unique[num]){
                result.push(num);
                unique[num] = 1;
            }
            getRandom(count,range,unique,result);
        }
        return result;
    }
    var randomList1 = getRandom(10);
    var randomList2 = getRandom(10,[100,200]);
    console.log(randomList1);
    console.log(randomList2);
无聊的上午 2018-01-29
  • 打赏
  • 举报
回复
去除重复:以前看过一个,我喜欢叫它搬砖,就是将数组1中的值先放一个到新数组中,然后新旧数组循环比较,如果数组1中的值与数组2中的值不一样就再放到数组2中去,如果一样就不做操作
瞄了个猫 2018-01-29
  • 打赏
  • 举报
回复

// 返回false或者和已存在数都不重复的数
var getRandom=function(arr,len,min,max){
	var temp= parseInt(Math.round(Math.random()*(max-min)))+min;
	if(arr.length!=0){
		for(var j=0;j<arr.length;j++){
			if(temp==arr[j]){
				return false;
			}
		}
	}
	return temp;
}
// 声明一个数组
var arr=[];
var func=function(len,min,max){
	for(var i=0;;i++){
		lenths=arr.length | 0;
		if(lenths<len){
			// 获取随机数并判断是否已经存在
			var rand=getRandom(arr,len,min,max);
			if(!!rand){
				arr.push(rand);
			}
		}else{
			break;  // 如果取值完成则退出循环
		}
	}
	return arr;
}
// 三个参数分别表示,获取个数,最大值,最小值
func(10,1,10);
yaotomo 2018-01-23
  • 打赏
  • 举报
回复
ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值

var s = new Set();
[2, 3, 5, 4, 5, 2, 2].map(x => s.add(x));
for (let i of s) {
  console.log(i);
}
// 2 3 5 4
天际的海浪 2018-01-23
  • 打赏
  • 举报
回复
temp_array.splice(arrIndex, 1);
MrBuEr 2018-01-23
  • 打赏
  • 举报
回复
#4楼的话,没办法规定范围哦,百度上我也看到这条呢。谢谢啦
MrBuEr 2018-01-23
  • 打赏
  • 举报
回复
你好,感谢三楼的回复,虽然实现了取不重复,但是没有重新再取,希望再能改进一下,
usecf 2018-01-23
  • 打赏
  • 举报
回复
<script type="text/javascript"> var count=3000; var originalArray=new Array;//原数组 //给原数组originalArray赋值 for (var i=0;i<count;i++){ originalArray[i]=i+1; } var d1=new Date().getTime(); for (var num,i=0;i<count;i++){ do{ num=Math.floor(Math.random()*count); }while(originalArray[num]==null); document.write(originalArray[num]+" , "); originalArray[num]=null; } </script>
yaotomo 2018-01-23
  • 打赏
  • 举报
回复

    function getArrayItems(arr,num){
          var temp_array = new Array();
          for(var index in arr){
            temp_array.push(arr[index]);
          }
          var return_array = new Array();
          for(var i= 0; i< num; i++){
              if(temp_array.length>0){
                var arrIndex = Math.floor(Math.random()*temp_array.length);
                return_array[i] = temp_array[arrIndex];
                temp_array.splice(arrIndex,0);
              }else{
                break;
              }
          }
          return return_array;
    }
    var my_array = new Array();
    for (var i=0; i<80; i++){
      my_array[i]= i+",";
    }
    my_array = getArrayItems(my_array,20);
    // for(var i=0;i<my_array.length;i++){
    //   document.writeln(my_array[i]);
    // }
    var s = new Set();
    my_array.map(x => s.add(x));
    for (let i of s) {
      document.writeln(i);
    }
MrBuEr 2018-01-23
  • 打赏
  • 举报
回复
你好,我不怎么懂,你能告诉我怎么加入到以上代码中去吗,或者其他办法,我新手。。。

87,989

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧