国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

javascript - js完全打亂數(shù)組
學(xué)習(xí)ing
學(xué)習(xí)ing 2017-07-05 10:43:39
0
8
1073
var arr = [0,1,2,3,4,5,6,7]

完全打亂,要求,每個(gè)元素的位置必須改變

學(xué)習(xí)ing
學(xué)習(xí)ing

全部回覆(8)
僅有的幸福

首先,題主並不是要傳統(tǒng)的數(shù)組亂序,如果是傳統(tǒng)的數(shù)組亂序,當(dāng)然首推Fisher-Yates,Math.random() 的黑科技並不能保證概率的一致,詳情可以看我以前的分析https://github.com/hanzichi/u...

如果每個(gè)位置都需要變動(dòng),隨便寫了一段程式碼,勉強(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)下

洪濤

把最後一個(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) 
某草草

隨機(jī)是不可能保證每個(gè)位置都會變動(dòng)的。

要徹底打亂,就不能保證位置都變。

笨一點(diǎn)的方法就是打亂一次,再跟陣列做比較,直到符合條件為止。

巴扎黑

雷雷

Ty80

雷雷

習(xí)慣沉默

函數(shù)隨機(jī)播放 (arr) {

雷雷
我想大聲告訴你

隨機(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))
}
阿神

最簡單的位置全都動(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ī)洗牌,有一定機(jī)率保持某個(gè)數(shù)不動(dòng),這樣才沒規(guī)律可循。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板