javascript - js完全打亂數(shù)組
問(wèn)題描述
var arr = [0,1,2,3,4,5,6,7]
完全打亂,要求,每個(gè)元素的位置必須要變動(dòng)
問(wèn)題解答
回答1:首先,題主并不是要傳統(tǒng)的數(shù)組亂序,如果是傳統(tǒng)的數(shù)組亂序,當(dāng)然首推 Fisher-Yates,Math.random() 的黑科技并不能保證概率的一致,詳情可以看我以前的分析 https://github.com/hanzichi/u...
如果每個(gè)位置都需要變動(dòng),隨便寫(xiě)了一段代碼,勉強(qiáng)可以用:
function shuffle(a) { let len = a.length; let shuffled = Array(len); for (let i = len; i--; ) { let rand = ~~(Math.random() * i); shuffled[i] = a[rand]; a[rand] = a[i]; } return shuffled;}
新建了一個(gè)數(shù)組,并且污染了原數(shù)組,很不優(yōu)雅,題主可以自己改進(jìn)下
回答2:把最后一個(gè)放第一個(gè)就實(shí)現(xiàn)了每個(gè)元素都動(dòng)了,可是完全打亂是什么意思?
var arr = [0,1,2,3,4,5,6,7], last = arr[arr.length - 1];arr.splice(arr.length - 1, 1);arr.unshift(last) 回答3:
隨機(jī)是不可能保證每個(gè)位置都變動(dòng)的。
要徹底打亂,就不能保證位置都變。
笨一點(diǎn)的方法就是打亂一次,再跟數(shù)組做比較,直到符合條件為止。
回答4:剛沒(méi)看清 , 這個(gè)可以嗎?function upset(arr){ let newArr = arr.slice().sort(() => Math.random()>0.5 ? 1 : -1) let result = arr.some((item,index)=>{ return item === newArr[index] }) if(!result){ return newArr }else{ return upset(newArr) }}回答5:
function compare(a , b){Math.random > 0.5 ? return -1 ; return 1 } arr.sort(compare); 回答6:
function shuffle (arr) {
var _floor = Math.floor,_random = Math.random,len = arr.length; for(var i = 0; i < len - 1; ++i){var rand_pos = _floor(_random() * (len - i)) + i;if(rand_pos != i){ var tmp = arr[i]; arr[i] = arr[rand_pos]; arr[rand_pos] = tmp;} } return arr;};回答7:
隨機(jī)平移,凱撒加密紅紅火火……
function shuffle (arr) { if (!Array.isArray(arr)) { return [] } var len = Math.floor(Math.random() * (arr.length - 1)) + 1 return arr.slice(len).concat(arr.slice(0, len))}回答8:
最簡(jiǎn)單的位置全都動(dòng)
> arr = [0,1,2,3,4,5,6,7]> arr.unshift(arr.pop())> arr[ 7, 0, 1, 2, 3, 4, 5, 6 ]> arr.sort((a , b)=>Math.random() > 0.5 ? -1:1)[ 6, 5, 4, 0, 1, 3, 7, 2 ]> arr.sort((a , b)=>Math.random() > 0.5 ? -1:1)[ 6, 0, 5, 3, 4, 7, 1, 2 ]
位置全都動(dòng)其實(shí)并不是最亂的;
最亂的應(yīng)該是隨機(jī)洗牌,有一定概率保持某個(gè)數(shù)不動(dòng),這樣才沒(méi)規(guī)律可循。
相關(guān)文章:
1. Docker for Mac 創(chuàng)建的dnsmasq容器連不上/不工作的問(wèn)題2. css3 - 圖片等比例縮放3. html - css3中多列高度 統(tǒng)一4. javascript - 使用angular 的ui-sref 中出現(xiàn)了中文參數(shù),點(diǎn)擊跳轉(zhuǎn)后瀏覽器的地址欄里出現(xiàn)轉(zhuǎn)義后的%AE....%a%45. css3 - 如何將網(wǎng)頁(yè)CSS背景圖高斯模糊且全屏顯示6. html5 - 這個(gè)代碼顯示功能如何實(shí)現(xiàn)?7. css3 - animation屬性,safari瀏覽器不支持相關(guān)效果8. javascript - 求賜教:網(wǎng)易郵箱Web端模擬登錄看信的加密參數(shù)_ntes_nnid、_ntes_nuid9. css - jq有無(wú)現(xiàn)成函數(shù)改變r(jià)otateX/Y的deg10. javascript - QWebEngineView 如何爬 angular 的動(dòng)態(tài)數(shù)據(jù)?
