Javascript從數(shù)組中隨機取出不同元素的兩種方法
一、常規(guī)算法
第一種方法較常規(guī),經(jīng)測試有bug,數(shù)據(jù)量大以后隨機幾次返回的對象直接是function而不是object。 當然簡單數(shù)據(jù)類型應(yīng)該沒有這個問題。
示例代碼
/** 從數(shù)組中隨機抽取數(shù)據(jù) 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; }
二、洗牌算法
第二種是使用洗牌算法,親測有效。
示例代碼
/** 隨機化原數(shù)組 **/ 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);
以上就是為大家總結(jié)的兩種Javascript從數(shù)組中隨機取出不同元素的方法,希望這篇文章能對大家的學(xué)習(xí)或者工作帶來一定的幫助,如果有疑問大家可以留言交流。
相關(guān)文章
JS動態(tài)添加元素及綁定事件造成程序重復(fù)執(zhí)行解決
這篇文章主要給大家介紹了關(guān)于JS動態(tài)添加元素及綁定事件造成程序重復(fù)執(zhí)行的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-12-12JavaScript自動內(nèi)存管理與垃圾回收策略詳細分析講解
JS的垃圾回收機制是為了以防內(nèi)存泄漏,內(nèi)存泄漏的含義就是當已經(jīng)不需要某塊內(nèi)存時這塊內(nèi)存還存在著,垃圾回收機制就是間歇的不定期的尋找到不再使用的變量,并釋放掉它們所指向的內(nèi)存。因為內(nèi)存的大小是有限的,所以當內(nèi)存不再需要的時候,我們需要對其進行釋放2023-01-01詳解JSONObject和JSONArray區(qū)別及基本用法
這篇文章主要介紹了詳解JSONObject和JSONArray區(qū)別及基本用法,需要的朋友可以參考下2017-10-10javascript getElementsByClassName 和js取地址欄參數(shù)
為了從一大堆HTML代碼中找出我們的樹狀菜單(也許有多個),我們先來實現(xiàn)一個通過className找DOM節(jié)點的方法:getElementsByClassName。這是對瀏覽器自有DOM方法的一個簡單但實用的擴充。2010-01-01判斷目標是否是window,document,和擁有tagName的Element的代碼
判斷目標是否是window,document,和擁有tagName的Element的代碼,需要的朋友可以參考下。2010-05-05JavaScript的內(nèi)置對象Math和字符串詳解
這篇文章主要為大家介紹了JavaScript的內(nèi)置對象Math和字符串,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-11-11JavaScript設(shè)計模式學(xué)習(xí)之“類式繼承”
這篇文章主要介紹了JavaScript設(shè)計模式學(xué)習(xí)之“類式繼承”,本文直接用代碼實例講解類式繼承的實現(xiàn)方法,需要的朋友可以參考下2015-03-03