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