Javascript从数组中随机取出不同元素的两种方法


Posted in Javascript onSeptember 22, 2016

一、常规算法

第一种方法较常规,经测试有bug,数据量大以后随机几次返回的对象直接是function而不是object。 当然简单数据类型应该没有这个问题。

示例代码

/**
     从数组中随机抽取数据 2016-09-09
   **/
   function getArrItem(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, 1);
       } else {
         break;
       }
     }
     return return_array;
   }

二、洗牌算法

第二种是使用洗牌算法,亲测有效。

示例代码

/**
      随机化原数组
    **/
    function shuffle(array) {
      var m = array.length,
        t, i;
      // 如果还剩有元素…
      while (m) {
        // 随机选取一个元素…
        i = Math.floor(Math.random() * m--);
        // 与当前元素进行交换
        t = array[m];
        array[m] = array[i];
        array[i] = t;
      }
      return array;
    }
 
//用法
var message = shuffle(totalArr);
message = message.slice(0, 3);

以上就是为大家总结的两种Javascript从数组中随机取出不同元素的方法,希望这篇文章能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
用js脚本控制asp.net下treeview的NodeCheck的实现代码
Mar 02 Javascript
Javascript 页面模板化很多人没有使用过的方法
Jun 05 Javascript
jquery批量控制form禁用的代码
Aug 06 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
Apr 15 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
Aug 10 Javascript
详解Axios统一错误处理与后置
Sep 26 Javascript
Angular使用Restful的增删改
Dec 28 Javascript
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
Mar 30 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
Oct 17 Javascript
vue路由拦截器和请求拦截器知识点总结
Nov 08 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
Sep 21 Javascript
用webAPI实现图片放大镜效果
Nov 23 Javascript
JavaScript面试题大全(推荐)
Sep 22 #Javascript
JavaScript 是什么意思
Sep 22 #Javascript
利用Node.js制作爬取大众点评的爬虫
Sep 22 #Javascript
JavaScript与java语言有什么不同
Sep 22 #Javascript
JavaScript中数组slice和splice的对比小结
Sep 22 #Javascript
深入理解JavaScript中的并行处理
Sep 22 #Javascript
Actionscript与javascript交互实例程序(修改)
Sep 22 #Javascript
You might like
PHP加密函数 Javascript/Js 解密函数
2013/09/23 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
最短的IE判断代码
2011/03/13 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
前端开发过程中浏览器版本的两种判定方法
2013/10/30 Javascript
js日期联动示例
2014/05/02 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
Angular之toDoList的实现代码示例
2017/12/02 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
vue v-model的用法解析
2020/10/19 Javascript
js实现扫雷源代码
2020/11/27 Javascript
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
Python MD5加密实例详解
2017/08/02 Python
Python小程序 控制鼠标循环点击代码实例
2019/10/08 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
工商学院毕业生自荐信
2013/11/12 职场文书
工程管理英文求职信
2014/03/18 职场文书
物业公司的岗位任命书
2014/06/06 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
2014年行政部工作总结
2014/11/19 职场文书
会计试用期自我评价
2015/03/10 职场文书
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS