作者imjeffreylee (jl)
看板Ajax
標題[問題] jQeury shuffle array問題
時間Mon Jan 15 13:52:10 2018
剛學三個禮拜超新手...
先上我的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)
請問各位可以指點一下嗎? 感恩
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 73.142.228.247
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Ajax/M.1515995538.A.635.html
1F:推 shadowjohn: $('#fruit').each(function(i){ --> 怪怪的 #fruit處 01/15 14:11
2F:→ shadowjohn: #fruit是 id,但id應該是唯一值 01/15 14:12
真的耶 不用id就可以了! 感謝shadowjohn!
3F:→ bibo9901: 這是我看過的錯誤shuffle方法中 最蠢的一種 01/15 14:14
這是我從一個網路上影片裡面看來的 請問這樣會有什麼問題?
4F:→ bibo9901: 1.這個方法是錯的,機率並不平均,你可以自己實驗 01/15 14:40
5F:→ bibo9901: 2. 0.5 - rand() 和 rand() 是一樣的意思 沒有任何意義 01/15 14:42
6F:→ bibo9901: 我講錯了,2.是為了把rand的範圍調整至[-1,1] 01/15 14:46
7F:推 Kenqr: shuffle相關的討論可在板上搜尋這個標題: 01/15 15:20
8F:→ Kenqr: chrome 的 Math.random() 好固定的感覺 01/15 15:20
感謝各位提供意見 我再來研究看看
※ 編輯: imjeffreylee (73.142.228.247), 01/15/2018 23:51:29
9F:推 oToToT: 亂給值是undefined behavior,會出現任何問題都是合理的吧 01/16 00:22
10F:推 oToToT: 話說這樣的寫法機率是平均的嗎? 01/16 00:42
12F:推 Kenqr: 樓上的寫法應該是不平均的。 01/16 11:37
13F:→ Kenqr: 假如陣列只有3項,排列組合就會有6種,每種的機率要一樣。 01/16 11:37
14F:→ Kenqr: 執行迴圈時依照產生的亂數,會出現27種執行過程, 01/16 11:37
15F:→ Kenqr: 27種過程的發生機率相同。 01/16 11:38
16F:→ Kenqr: 27/6無法整除,所以6種排列組合的出現機率是不同的。 01/16 11:38
17F:推 LPH66: oToToT 的方法改一個地方就平均了 01/16 18:11
18F:→ LPH66: var key 那行限定產生出來的 key 大於等於 i 即可 01/16 18:11
19F:→ LPH66: 這樣就等同於每次從一疊牌中隨機抽一張出來 01/16 18:13
20F:→ shadowjohn: 寫個迴圈,陣列裡的值隨機倆倆交換,這種小陣列 01/17 08:36
21F:→ shadowjohn: 隨便跑個幾十次就亂七八糟了,跟撲克牌一樣 01/17 08:36
22F:推 Hevak: Fisher–Yates shuffle 01/17 21:28