zoukankan      html  css  js  c++  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

  • 相关阅读:
    【每日日报】第五十三天安装My SQL
    【每日日报】第五十一天jsp
    【每日日报】第五十四天
    JDK安装和卸载
    JDK的卸载和安装
    【每日日报】第五十二天
    【每日日报】第五十六天
    基于图书管理系统的查
    Android学习——day5
    每日日报2020.7.26 1905
  • 原文地址:https://www.cnblogs.com/sword-successful/p/5857132.html
Copyright © 2011-2022 走看看