Loading

js从数组中随机取出不同的元素

前言

      上午处理个需求需要从一个总数组中随机取出不同的元素。共使用两个方法。第一种方法较常规,经测试有bug,数据量大以后随机几次返回的对象直接是function而不是object。 当然简单数据类型应该没有这个问题。第二种是使用洗牌算法,亲测有效。

 

一、常规算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
          从数组中随机抽取数据 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;
      }

  

二、洗牌算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
            随机化原数组
        **/
        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);

  

参考资料

http://www.wufangbo.com/js-shu-zu-shu-ju/

http://www.cnblogs.com/Wayou/p/get_random_subset_from_an_array.html

作者:sword-successful

出处:https://www.cnblogs.com/sword-successful/p/5857132.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   歪头儿在北京  阅读(8672)  评论(1编辑  收藏  举报
努力加载评论中...
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示