JavaScript数组对象实现增加一个返回随机元素的方法


Posted in Javascript onJuly 27, 2015

本文实例讲述了JavaScript数组对象实现增加一个返回随机元素的方法。分享给大家供大家参考。具体如下:

核心特性:

概率随机、顺序随机、随机冒泡

本方法 来自个人手写 JavaScript 的实践,只涉及 JavaScript 1.5(ECMAscript 3 国际标准)语言本身,在所有 JS 引擎实现中通用~

为Array对象新增random方法:

(function () {
  function Random_SN(iArray) {
    return Math.floor(Math.random() * iArray.length);
  }
  function Probability_Random(iArray) {
    var Random_Int;
    if (iArray.Random_SN === undefined)
      iArray.Random_SN = -1;
    do Random_Int = Random_SN(iArray);
    while ( Random_Int == iArray.Random_SN )
    iArray.Random_SN = Random_Int;
    return iArray[Random_Int];
  }
  function Sequence_Random(iArray) {
    return iArray.splice(Random_SN(iArray), 1)[0];
  }
  Array.prototype.random = function (Mode, Pop) {
    if (! Mode)
      return Probability_Random(this);
    if (! Pop) {
      if (! (this.Random_Queue && this.Random_Queue.length))
        this.Random_Queue = [].concat(this);
      return Sequence_Random(this.Random_Queue);
    }
    return Sequence_Random(this);
  };
})();

使用示例:

// 【概率随机】
//
// 元素的返回 完全随机,出现几率不定,有限次调用不保证能返回所有元素
var iElement = iArray.random();
// 【顺序随机】
//
// 元素的返回 有周期性,在每个周期内,元素都出现一次,但顺序不定
var iElement = iArray.random(true);
// 【随机冒泡】
//
// 每次调用都从原数组中随机取出一个元素返回(原数组 就地改变)
var iElement = iArray.random(true, true);

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
Extjs优化(二)Form表单提交通用实现
Apr 15 Javascript
js history对象简单实现返回和前进
Oct 30 Javascript
Node.js中创建和管理外部进程详解
Aug 16 Javascript
javascript模拟php函数in_array
Apr 27 Javascript
jQuery前端开发35个小技巧
May 24 Javascript
老生常谈JavaScript 正则表达式语法
Aug 20 Javascript
web 屏蔽BackSpace键实例代码
Dec 24 Javascript
基于JS对象创建常用方式及原理分析
Jun 28 Javascript
Bootstrap 树控件使用经验分享(图文解说)
Nov 06 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
Jan 21 Javascript
js实现多个倒计时并行 js拼团倒计时
Feb 25 Javascript
基于node+vue实现简单的WebSocket聊天功能
Feb 01 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
Jul 27 #Javascript
Javascript验证Visa和MasterCard信用卡号的方法
Jul 27 #Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
Jul 27 #Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
Jul 27 #Javascript
JavaScript动态提示输入框输入字数的方法
Jul 27 #Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
Jul 27 #Javascript
JQ技术实现注册页面带有校验密码强度
Jul 27 #Javascript
You might like
帖几个PHP的无限分类实现想法~
2007/01/02 PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
2011/11/25 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
Thinkphp整合阿里云OSS图片上传实例代码
2019/04/28 PHP
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
JavaScript this 深入理解
2009/07/30 Javascript
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
jquery+json 通用三级联动下拉列表
2010/04/19 Javascript
瀑布流布局并自动加载实现代码
2013/03/12 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
2013/12/17 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
jQuery中removeAttr()方法用法实例
2015/01/05 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
AngularJS 2.0入门权威指南
2016/10/08 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
Python从MP3文件获取id3的方法
2015/06/15 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
高等教育专业自荐信范文
2014/03/26 职场文书
教师新年寄语
2014/04/03 职场文书
反对邪教标语
2014/06/30 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
2019年聘任书的写作格式及范文!
2019/07/03 职场文书
一文教你快速生成MySQL数据库关系图
2022/06/28 Redis