你的位置:首页 > Java教程

[Java教程]js从数组中随机取出不同的元素


前言

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

 

一、常规算法

 /**      从数组中随机抽取数据 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;    }

  

二、洗牌算法

/**      随机化原数组    **/    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