javascript - js完全打亂數組
学习ing
学习ing 2017-07-05 10:43:39
0
8
905
var arr = [0,1,2,3,4,5,6,7]

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

学习ing
学习ing

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

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

如果每個位置都需要變動,隨便寫了一段程式碼,勉強可以用:

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;
}

新建了一個數組,並且污染了原始數組,很不優雅,主題可以自己改進下

洪涛

把最後一個放第一個就實現了每個元素都動了,可是完全打亂是什麼意思?

var arr = [0,1,2,3,4,5,6,7], last = arr[arr.length - 1];
arr.splice(arr.length - 1, 1);
arr.unshift(last) 
某草草

隨機是不可能保證每個位置都會變動的。

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

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

巴扎黑

雷雷

Ty80

雷雷

習慣沉默

函數隨機播放 (arr) {

雷雷
我想大声告诉你

隨機平移,凱撒加密紅火火…

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

最簡單的位置全都動

> 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 ]

位置全都動其實不是最亂的;

最亂的應該是隨機洗牌,有一定機率保持某個數不動,這樣才沒規律可循。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!