[問題] jQeury shuffle array問題

看板Ajax作者 (jl)時間6年前 (2018/01/15 13:52), 6年前編輯推噓7(7015)
留言22則, 6人參與, 6年前最新討論串1/1
剛學三個禮拜超新手... 先上我的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://www.ptt.cc/bbs/Ajax/M.1515995538.A.635.html

01/15 14:11, 6年前 , 1F
$('#fruit').each(function(i){ --> 怪怪的 #fruit處
01/15 14:11, 1F

01/15 14:12, 6年前 , 2F
#fruit是 id,但id應該是唯一值
01/15 14:12, 2F
真的耶 不用id就可以了! 感謝shadowjohn!

01/15 14:14, 6年前 , 3F
這是我看過的錯誤shuffle方法中 最蠢的一種
01/15 14:14, 3F
這是我從一個網路上影片裡面看來的 請問這樣會有什麼問題?

01/15 14:40, 6年前 , 4F
1.這個方法是錯的,機率並不平均,你可以自己實驗
01/15 14:40, 4F

01/15 14:42, 6年前 , 5F
2. 0.5 - rand() 和 rand() 是一樣的意思 沒有任何意義
01/15 14:42, 5F

01/15 14:46, 6年前 , 6F
我講錯了,2.是為了把rand的範圍調整至[-1,1]
01/15 14:46, 6F

01/15 15:20, 6年前 , 7F
shuffle相關的討論可在板上搜尋這個標題:
01/15 15:20, 7F

01/15 15:20, 6年前 , 8F
chrome 的 Math.random() 好固定的感覺
01/15 15:20, 8F
感謝各位提供意見 我再來研究看看 ※ 編輯: imjeffreylee (73.142.228.247), 01/15/2018 23:51:29

01/16 00:22, 6年前 , 9F
亂給值是undefined behavior,會出現任何問題都是合理的吧
01/16 00:22, 9F

01/16 00:42, 6年前 , 10F
話說這樣的寫法機率是平均的嗎?
01/16 00:42, 10F

01/16 00:42, 6年前 , 11F

01/16 11:37, 6年前 , 12F
樓上的寫法應該是不平均的。
01/16 11:37, 12F

01/16 11:37, 6年前 , 13F
假如陣列只有3項,排列組合就會有6種,每種的機率要一樣。
01/16 11:37, 13F

01/16 11:37, 6年前 , 14F
執行迴圈時依照產生的亂數,會出現27種執行過程,
01/16 11:37, 14F

01/16 11:38, 6年前 , 15F
27種過程的發生機率相同。
01/16 11:38, 15F

01/16 11:38, 6年前 , 16F
27/6無法整除,所以6種排列組合的出現機率是不同的。
01/16 11:38, 16F

01/16 18:11, 6年前 , 17F
oToToT 的方法改一個地方就平均了
01/16 18:11, 17F

01/16 18:11, 6年前 , 18F
var key 那行限定產生出來的 key 大於等於 i 即可
01/16 18:11, 18F

01/16 18:13, 6年前 , 19F
這樣就等同於每次從一疊牌中隨機抽一張出來
01/16 18:13, 19F

01/17 08:36, 6年前 , 20F
寫個迴圈,陣列裡的值隨機倆倆交換,這種小陣列
01/17 08:36, 20F

01/17 08:36, 6年前 , 21F
隨便跑個幾十次就亂七八糟了,跟撲克牌一樣
01/17 08:36, 21F

01/17 21:28, 6年前 , 22F
Fisher–Yates shuffle
01/17 21:28, 22F
文章代碼(AID): #1QN46IOr (Ajax)
文章代碼(AID): #1QN46IOr (Ajax)