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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM