JS随机数不重复
方法一
思路:首先创建一个1到3000的数组,每次取一个数,然后去除数组中取出的这个数, 这样就可以实现永不重复。
var count=3000;
var originalArray=new Array;//原数组
//给原数组originalArray赋值
for (var i=0;i<count;i++){
originalArray[i]=i+1;
}
var d1=new Date().getTime();
for (i=0;i<count;i++){
var index=Math.floor(Math.random()*originalArray.length); //随机取一个位置
document.write(index+" , ");
originalArray.splice(index,1);
}
var d2=new Date().getTime();
document.write("运算耗时"+(d2-d1));
性能:耗时 1528 毫秒。
方法二
思路:对方法一的slice方法进行改进,以提高效率。还是从原数组取出一个数, 然后让原数组的这个位置赋值为null 。下一次取数时判断是否为null,如果是null就不取。
var count=3000;
var originalArray=new Array;//原数组
//给原数组originalArray赋值
for (var i=0;i<count;i++){
originalArray[i]=i+1;
}
var d1=new Date().getTime();
for (var num,i=0;i<count;i++){
do{
num=Math.floor(Math.random()*count);
}while(originalArray[num]==null);
document.write(originalArray[num]+" , ");
originalArray[num]=null;
}
var d2=new Date().getTime();
document.write("运算耗时"+(d2-d1));
性能:耗时 290 毫秒。
方法三
思路:把原数组打散,然后再依次输出, 这样也可以做到随机永不重复,且效率更高。
var count=3000;
var originalArray=new Array;//原数组
//给原数组originalArray赋值
for (var i=0;i<count;i++){
originalArray[i]=i+1;
}
var d1=new Date().getTime();
originalArray.sort(function(){ return 0.5 - Math.random(); });
for (var i=0;i<count;i++){
document.write(originalArray[i]+" , ");
}
var d2=new Date().getTime();
document.write("运算耗时"+(d2-d1));
性能:耗时 229 毫秒。
通过性能分析,得出方法三为最佳方案。
最新文章
- AlloyRenderingEngine文本框组件
- mysql启动报错The server quit without updating PID file
- 学习笔记-Java编程思想
- 第一课 移动端&;响应式
- BZOJ3175 Tjoi2013 攻击装置(二分图匹配)
- Jsonp简单认识(后端使用的是asp.net mvc)
- SecureCRT设置
- what is the virtual machine, when and why we need use it ?
- PHP代码安全学习笔记V1.0
- Lucas定理的理解与应用
- HDU-4515 小Q系列故事——世界上最遥远的距离
- 关于初始化C++类成员
- Linux-day1-上课笔记
- XII Open Cup named after E.V. Pankratiev. GP of Eastern Europe (AMPPZ-2012)
- 使用 curses 函数库管理基于文本的屏幕
- Eclipse 项目导入 Android Studio 导致的乱码问题
- MVC4中使用Uploadify3.2
- == 和 equals,equals 与 hashcode,HashSet 和 HashMap,HashMap 和 Hashtable
- pig分组统计例子
- hadoop 环境配置
热门文章
- linux截取字符串之sort、uniq、cut用法
- 使用selenium时提示:ImportError:No module named selenium
- canvas填充样式
- 关于使用Unity开发Kinect时出现的Runtime Error错误的解决方式
- 1.由浅入深解析 SimpleDateFormat
- web服务器学习1---httpd-2.4.29源码手动编译安装
- Leetcode 17.——Letter Combinations of a Phone Number
- JavaScript(第三十一天)【JSON】
- 第十四,十五周PTA作业
- Beta阶段报告