需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现。
先来生成一个有序的数组:
5 |
for ( ; i < length; i++ ){ |
从一个长度为 100 的有序数组中随机拿出 10 个随机的数,并且不能有重复。
方法1:随机抽取法
01 |
var gRandomArr = function( arr, length ){ |
06 |
for ( ; i < length; i++ ){ |
08 |
index = parseInt( Math.random() * arr.length ); |
09 |
// 将随机索引对应的数组元素添加到新的数组中 |
10 |
newArr.push( arr[index] ); |
12 |
arr.splice( index, 1 ); |
19 |
gRandomArr( arr, 10 ); |
方法1主要是采用基于数组本身的长度去生成随机的索引值,然后将索引值对应的数组元素添加到随机数组中,由于不能有重复,在添加好后将删除原数组的元素。
方法2:随机打乱原数组的顺序,然后再一次性返回
01 |
var gRandomArr = function( arr, length ){ |
02 |
// 使用sort将原数组的顺序打乱,让有序变成无序 |
04 |
return Math.random() - 0.5; |
08 |
return arr.slice( 0, length ); |
12 |
gRandomArr( arr, 10 ); |
方法2采用的办法是先打乱原数组的顺序,但这里需要用到 sort 来对原数组进行排序,如果数组长度较大的话,sort 排序的性能损耗会更大,因为需要遍历整个数组,而随机抽取的话,不需要对整个数组进行遍历,故其性能会更好。
最新文章
- tomcat配置https
- Java-transient
- String,你到底创建了几个对象????
- have you declared this activity in your AndroidManifest.xml
- 使用Django创建简易Blog
- 玩玩kafka1 单机安装
- Tensorflow卷积神经网络
- Rotation Proposals
- docker pull报错failed to register layer: Error processing tar file(exit status 1): open permission denied
- redux 入门
- CF1099F Cookies
- HDU 5514
- clion中资源文件以及头文件的引用
- 学以致用一 安装centos7.2虚拟机
- java操作数据库的事务支持
- 初识HTML和WEB标准
- MySQL数据库启停
- 最新最全的iOS手机支付总结
- L194
- angular4 动态Form中获取表单字段并在页面中使用的方法
热门文章
- Spring的javaMail邮件发送(带附件)
- 兼容IE, Chrome的ajax function
- Table Groups [AX 2012]
- Mysql slow query log
- php中method_exists()和is_callable()如何进行语句判断
- hdwiki 数据库结构说明
- ACM第一站————快速排序
- js判断radio,checkbox是否选中
- IIS装好后,局域网不能访问
- 【20160924】GOCVHelper综述