JavaScript算法题之–随机数的生成
来源:互联网 发布:office使用技巧软件 编辑:程序博客网 时间:2024/06/14 02:49
(准备面试,多看点题。来自雨夜带刀's Blog)
需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现。
先来生成一个有序的数组:
var arr = [],length = 100,i = 0;for( ; i < length; i++ ){ arr.push( i );}
从一个长度为 100 的有序数组中随机拿出 10 个随机的数,并且不能有重复。
方法1:随机抽取法
var gRandomArr = function( arr, length ){ var newArr = [], i = 0, index; for( ; i < length; i++ ){ // 利用数组长度生成随机索引值 index = parseInt( Math.random() * arr.length ); // 将随机索引对应的数组元素添加到新的数组中 newArr.push( arr[index] ); // 删除原数组中随机生成的元素 arr.splice( index, 1 ); } return newArr;};// 调用gRandomArr( arr, 10 );
方法1主要是采用基于数组本身的长度去生成随机的索引值,然后将索引值对应的数组元素添加到随机数组中,由于不能有重复,在添加好后将删除原数组的元素。
方法2:随机打乱原数组的顺序,然后再一次性返回
var gRandomArr = function( arr, length ){ // 使用sort将原数组的顺序打乱,让有序变成无序 arr.sort(function(){ return Math.random() - 0.5; }); // 从原数组中一次性返回10个元素 return arr.slice( 0, length );};// 调用gRandomArr( arr, 10 );
方法2采用的办法是先打乱原数组的顺序,但这里需要用到 sort 来对原数组进行排序,如果数组长度较大的话,sort 排序的性能损耗会更大,因为需要遍历整个数组,而随机抽取的话,不需要对整个数组进行遍历,故其性能会更好。
0 0
- JavaScript算法题之–随机数的生成
- javaScript细节之生成不重复的随机数
- 随机数生成算法的研究
- java随机数的生成算法
- 伪随机数的生成算法
- iPhone之随机数的生成
- iPhone之随机数的生成
- 生成伪随机数的算法–线性同余法
- sencha(javascript) 中 生成随机数的方法:
- JavaScript生成指定范围的随机数和随机数序列
- C#生成随机数之二 生成不重复的随机数
- javascript 随机数生成方法
- javascript 随机数生成方法
- javascript 生成UUID随机数
- javascript 生成随机数
- 生成javascript随机数
- 11、JavaScript生成随机数
- javascript-生成随机数
- JavaScript算法题之–查找不同顺序排列的字符串
- IOS 关于如何修改facebook内部封装好的控件属性(如何修改封装好的控件)
- .owner = THIS_MODULE为什么加“点”的原因
- Xamarin.Android开发及常见问题的解决
- 将博客搬至CSDN
- JavaScript算法题之–随机数的生成
- JavaScript继承方式详解
- Target runtime com.genuitec.runtime.generic.jee60 is not defined.
- 经典Spring mvc 文章
- Sencha Touch 组件选择器
- Wireshark过滤规则
- Ugly Numbers
- NFD源码阅读——noncopyable函数
- javascript解三阶幻方谜题