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

雖然這方法貌似不算完全隨機,但以目前還堪用,不過看樣子未來是一定需要調整的!


覺得目前還是不得其門而入,不同的方式也許都能夠正常運作,但若考慮到其他影響因素,每個功能的使用時機與優劣又會有所區分,這可能是我目前沒辦法好好感受的部分,畢竟在這個簡陋的功能中要運算或者互相影響的部分太少了...

 

arrow
arrow
    文章標籤
    javascript array shuffle
    全站熱搜

    Ter 發表在 痞客邦 留言(0) 人氣()