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 相关文章推荐
Prototype使用指南之array.js
Jan 10 Javascript
理解javascript中的回调函数(callback)
Sep 02 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
Nov 10 Javascript
js实现照片墙功能实例
Feb 05 Javascript
javascript实现获取服务器时间
May 19 Javascript
JavaScript常用基础知识强化学习
Dec 09 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
Jan 05 Javascript
js中作用域的实例解析
Mar 16 Javascript
实现jquery放大镜的两种方法
Feb 22 jQuery
vue组件间的参数传递实例详解
Apr 26 Javascript
微信小程序中为什么使用var that=this
Aug 27 Javascript
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
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查询域名状态whois的类
2006/11/25 PHP
php基础知识:控制结构
2006/12/13 PHP
php一些公用函数的集合
2008/03/27 PHP
PHP中include与require使用方法区别详解
2013/10/19 PHP
php多重接口的实现方法
2015/06/20 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
Javascript的IE和Firefox兼容性汇编(zz)
2007/02/02 Javascript
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
Node.js中的流(Stream)介绍
2015/03/30 Javascript
jQuery关键词说明插件cluetip使用指南
2015/04/21 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
2015/11/30 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
Python设计模式之MVC模式简单示例
2018/01/10 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
有关HTML5页面在iPhoneX适配问题
2017/11/13 HTML / CSS
LACOSTE波兰官网:Polo衫、服装和鞋类
2020/09/29 全球购物
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
职员竞岗演讲稿
2014/05/14 职场文书
师德师风承诺书
2014/05/23 职场文书
结婚老公保证书
2015/02/26 职场文书
Python3的进程和线程你了解吗
2022/03/16 Python
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js
HttpClient实现文件上传功能
2022/08/14 Java/Android