博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
相邻不重复随机数的生成及优化
阅读量:5966 次
发布时间:2019-06-19

本文共 1711 字,大约阅读时间需要 5 分钟。

生成相邻不重复随机数是之前抽奖插件的遗留问题,在中已经简单说过,但没有更好的解决方案。经过一个多月的修改,已经趋于完善,在此分享一下这个问题的解决方法。以下是最初的方法,但是会出现一个单独的全局变量,整体而言稍显多余,不算完美。

// 产生相邻不重复的随机数,n 为随机数个数var b = 0;function random(n) {
var a = Math.floor(Math.random() * n); if (a == b) { return random(n); } else { b = a; return b; }};

为了避免多余的全局变量,需要使用立即执行函数以及闭包的方法。这个问题不难,但对于初学者来说,这个问题却很值得深思。有利于深入理解 JS 的相关概念。代码如下

// 产生相邻不重复的随机数,n 为随机数个数 var random = function(){        var b = 0;        return function (n) {
var a = Math.floor(Math.random() * n); if (a == b) { return random(n); } else { b = a; return b; } } }();

对于修改后的代码,虽然代码不多,变化不大,但我仍然有很多不懂的问题,比如函数参数放在哪里合适,返回的函数是否必须是匿名函数等等。整体而言,我仍然感觉这不是一个太好的解决方法。经过一些尝试及思考,所谓对比变量就是产生的抽奖号,最终把随机函数封装在了构造函数的原型方法中。这样看来,终于去除了零散多余的函数及变量,也是我最初希望实现的效果。

;(function(window, $) {        // 插件主体        $.plugin = function(el, options) {        }        // 默认配置        $.plugin.defaults = {        }        // 原型方法        $.plugin.prototype = {                ......                               // 产生相邻不重复的随机数,n 为随机数个数                random: function(n) {                    var self = this;                    var rand = Math.floor(Math.random() * n);                    if (rand == self.luckyNum) {                        return self.random(n);                    } else {                        self.luckyNum = rand;                        return self.luckyNum;                    }                },               ......             }          // 设置 jQuery 插件        $.fn.plugin = function(options) {            return instance;        } })(window, jQuery);

转载于:https://www.cnblogs.com/nzbin/p/6358962.html

你可能感兴趣的文章
Unity寻路的功能总结
查看>>
Python访问PostGIS(建表、空间索引、分区表)
查看>>
quick-cocos2d-x开发环境Lua for IntelliJ IDEA的安装
查看>>
Target-Action回调模式
查看>>
换个红圈1微信头像恶搞一下好友
查看>>
Socket网络编程--简单Web服务器(3)
查看>>
ylbtech_dbs_article_五大主流数据库模型
查看>>
Java并发专题 带返回结果的批量任务运行 CompletionService ExecutorService.invokeAll
查看>>
10行Python代码解决约瑟夫环(模拟)
查看>>
一个简单好用的日志框架NLog
查看>>
超级硬盘数据恢复软件 4.6.5.0注冊码破解版
查看>>
一款基于jquery和css3实现的摩天轮式分享按钮
查看>>
Android创建启动画面
查看>>
Linux中date命令的各种实用方法--转载
查看>>
mysqld -install命令时出现install/remove of the service denied错误的原因和解决办法
查看>>
玩家游戏状态
查看>>
Android 小技巧-- TextView与EditText 同步显示
查看>>
苹果企业版帐号申请记录
查看>>
C++ Error: error LNK2019: unresolved external symbol
查看>>
Bitmap 和Drawable 的区别
查看>>