• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
晒不干的咸鱼
博客园    首页    新随笔    联系   管理    订阅  订阅
用JS写了一个随机取不同的数据的例子

之前有项目要用类似的功能,想随机从一些数据里抽取一些完全不相同的数据,想了一个这个逻辑,于是就写了个例子,如下:

var sa = [];

var len = 15;

for(var i=0;i<len;i++){

sa.push(i);

}

for(var i=0;i<10;i++){

//alert('剩下的长度:----'+sa.length);

var rate = parseInt(Math.random()*sa.length);

//alert('命中的key----'+rate);

var subs = sa.splice(rate,1);

//alert('命中的value---'+subs+'---typeof:'+typeof(subs));

}

alert('最后剩余:---'+sa.join(','));

可以看出,最核心的地方就是splice函数

以下是jk推荐的算法:

这是一个典型的抽牌算法。
抽牌算法与洗牌算法推荐如下:

 

 1 function getRandomArray(m,n)   //得到m张牌里的n张牌 (m>=n>0)
2 {
3 if(n==null || n==m )
4 return getRandomPlayCard(m);
5 var array1=new Array(m);
6 for(var i=0;i<m;i++)
7 array1[i]=i;
8 var m2=m-0.001;
9 for(var i=0;i<n;i++)
10 {
11 var rnd=Math.floor(Math.random()*m2);
12 var swap=array1[i];array1[i]=array1[rnd];array1[rnd]=swap;
13 }
14 return(array1.slice(0,n));
15 }
16
17 function getRandomPlayCard(m) //洗牌
18 {
19 var array1=new Array(m);
20 for(var i=0;i<m;i++){
21 var rnd=Math.floor(Math.random()*(i+0.999))
22 array1[i]=array1[rnd];
23 array1[rnd]=i;
24 }
25 return array1;
26 }
27
28 document.write(getRandomPlayCard(100)+"<br><br>"+getRandomArray(100,5));



posted on 2011-12-29 13:44  晒不干的咸鱼  阅读(431)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3