Javascript從數(shù)組中隨機(jī)取出不同元素的兩種方法
一、常規(guī)算法
第一種方法較常規(guī),經(jīng)測(cè)試有bug,數(shù)據(jù)量大以后隨機(jī)幾次返回的對(duì)象直接是function而不是object。 當(dāng)然簡(jiǎn)單數(shù)據(jù)類(lèi)型應(yīng)該沒(méi)有這個(gè)問(wèn)題。
示例代碼
/**
從數(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í)或者工作帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
JS動(dòng)態(tài)添加元素及綁定事件造成程序重復(fù)執(zhí)行解決
這篇文章主要給大家介紹了關(guān)于JS動(dòng)態(tài)添加元素及綁定事件造成程序重復(fù)執(zhí)行的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-12-12
JavaScript自動(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-01
js中查找最近的共有祖先元素的實(shí)現(xiàn)代碼
司徒正美給出的題,也嘗試著寫(xiě)一下。希望大家多多交流。2010-12-12
詳解JSONObject和JSONArray區(qū)別及基本用法
這篇文章主要介紹了詳解JSONObject和JSONArray區(qū)別及基本用法,需要的朋友可以參考下2017-10-10
javascript getElementsByClassName 和js取地址欄參數(shù)
為了從一大堆HTML代碼中找出我們的樹(shù)狀菜單(也許有多個(gè)),我們先來(lái)實(shí)現(xiàn)一個(gè)通過(guò)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-05
JavaScript的內(nèi)置對(duì)象Math和字符串詳解
這篇文章主要為大家介紹了JavaScript的內(nèi)置對(duì)象Math和字符串,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-11-11
從基礎(chǔ)開(kāi)始建立一個(gè)JS代碼庫(kù)
從基礎(chǔ)開(kāi)始建立一個(gè)JS代碼庫(kù),更新中 有心人會(huì)領(lǐng)技術(shù)走的更遠(yuǎn)2009-07-07
JavaScript設(shè)計(jì)模式學(xué)習(xí)之“類(lèi)式繼承”
這篇文章主要介紹了JavaScript設(shè)計(jì)模式學(xué)習(xí)之“類(lèi)式繼承”,本文直接用代碼實(shí)例講解類(lèi)式繼承的實(shí)現(xiàn)方法,需要的朋友可以參考下2015-03-03

