[問題] jQeury shuffle array問題

作者: imjeffreylee (昌)   2018-01-15 13:52:10
剛學三個禮拜超新手...
先上我的code
var cards = ['1.jpg', '2.jpg', ..., '24.jpg']; //array裡面24張圖
var shuffle = function(){
cards.sort(function(){
return .5-Math.random();
})
} //簡易shuffle,在console裡面看是有成功每次順序都不一樣
var assignCards = function(){
$('#fruit').each(function(i){
$(this).attr('src', cards[i]);
})
} //想法是把array裡面打亂過後的24張圖放到24個沒有src的<img>裡面
shuffle();
console.log(cards);
assignCards();
問題是每次都只有第一個空的<img>有成功抓到array裡打亂後的第一張圖
後面全部顯示src(unknown)
請問各位可以指點一下嗎? 感恩
作者: shadowjohn (轉角遇到愛)   2018-01-15 14:11:00
$('#fruit').each(function(i){ --> 怪怪的 #fruit處#fruit是 id,但id應該是唯一值
作者: bibo9901 (function(){})()   2018-01-15 14:14:00
這是我看過的錯誤shuffle方法中 最蠢的一種1.這個方法是錯的,機率並不平均,你可以自己實驗2. 0.5 - rand() 和 rand() 是一樣的意思 沒有任何意義我講錯了,2.是為了把rand的範圍調整至[-1,1]
作者: Kenqr (function(){})()   2018-01-15 15:20:00
shuffle相關的討論可在板上搜尋這個標題:chrome 的 Math.random() 好固定的感覺
作者: oToToT (屁孩)   2018-01-16 00:22:00
亂給值是undefined behavior,會出現任何問題都是合理的吧話說這樣的寫法機率是平均的嗎?https://codepen.io/oToToT/full/qjZyLe/
作者: Kenqr (function(){})()   2018-01-16 11:37:00
樓上的寫法應該是不平均的。假如陣列只有3項,排列組合就會有6種,每種的機率要一樣。執行迴圈時依照產生的亂數,會出現27種執行過程,27種過程的發生機率相同。27/6無法整除,所以6種排列組合的出現機率是不同的。
作者: LPH66 (-6.2598534e+18f)   2018-01-16 18:11:00
oToToT 的方法改一個地方就平均了var key 那行限定產生出來的 key 大於等於 i 即可這樣就等同於每次從一疊牌中隨機抽一張出來
作者: shadowjohn (轉角遇到愛)   2018-01-17 08:36:00
寫個迴圈,陣列裡的值隨機倆倆交換,這種小陣列隨便跑個幾十次就亂七八糟了,跟撲克牌一樣
作者: Hevak (Arthow Eshes)   2018-01-17 21:28:00
Fisher–Yates shuffle

Links booklink

Contact Us: admin [ a t ] ucptt.com