close
- Keywords -
(標題好像已經說盡一切了)
此文章為記錄菜鳥coding歷程,若能提點還請各路大神回覆~
為了將原本的題目順序給打亂,我嘗到了幾次失敗,順便記錄一下未來該注意的地方。
目標:將題目以不會重複的方式隨機排序
意指我如果有五個單字,JSON資料如下
[ {"efficiency" : "效率"}, {"impressive" : "感人的"}, {"indulgence" : "放縱"}, {"observe" : "觀察"}, {"currency" : "貨幣"} ]
我想要讓這五個單字隨機出現,但作答的這五次沒有任何一次碰到重複的單字。
第一次嘗試 shuffle 算法:
1. 從原 array 中隨機挑出一個數
2. 將該數 push 至一個空 array
3. 將原 array 中的該數用 splice 刪去
以此方式循環,空 array 最後會成為打亂的新 array
function shuffle(arr){ var result = [], random; while(arr.length>0){ random = Math.floor(Math.random() * arr.length); result.push(arr[random]) arr.splice(random, 1) } return result; }
概念就好像在派牌一樣,因為覺得有趣所以先試了這個方法,原本自信滿滿想說這樣總可以了吧 😏
結果工程師男友提點我應該要考慮到幾個問題:
1. 動到原有數組(也就是我的中英單字庫)對未來不論是擴充或是維護會不會有問題?
2. 跑完重新亂數排列所需時間,是否會有更快的解決方法?
不過最後我也選了個看似差不多,目前用起來沒問題但感覺未來有可能會出問題的 .sort
vocaData.sort(function(){ var num = Math.random() > 0.5 ? -1:1; return num; });
雖然這方法貌似不算完全隨機,但以目前還堪用,不過看樣子未來是一定需要調整的!
覺得目前還是不得其門而入,不同的方式也許都能夠正常運作,但若考慮到其他影響因素,每個功能的使用時機與優劣又會有所區分,這可能是我目前沒辦法好好感受的部分,畢竟在這個簡陋的功能中要運算或者互相影響的部分太少了...
文章標籤
全站熱搜
留言列表