利用JS模擬排隊系統


我愛擼碼,擼碼使我感到快樂!
大家好,我是Counter。
今天給大家分享的是js模擬排隊系統,剛開始有排隊序列,序列里有vip用戶和普通用戶,vip用戶永遠位於普通用戶的前面,只有當當前vip用戶都辦理好手續,才會叫號普通用戶,每5秒產生一個隨機客戶。
效果如圖:

 

// 函數的閉包,立即執行
        var autoPerson = (function () {
            // 定義vip用戶和普通用戶
            var vipNum = 0;
            var norNum = 0;
            return function () {
                // 隨機產生vip或者普通用戶
                var randomNum = Math.random();
            if ( randomNum > 0.5) {
                vipNum++;
                return "V" + vipNum;
            }
            else {
                norNum++;
                return "N" + norNum;
            }
        }
    })();
        // 定義一個排隊數組,長度為6
        var personArr = [];
        var perLen = 6;
        for( var i = 0; i < perLen; i++) {
            // 每循環一次掉用函數vipFirst函數一次,傳入參數,隨機產生vip或者普通用戶
            vipFirst(autoPerson());
        }
        // 對數組進行整合,如果當前傳入的客戶是VIP的話
        function vipFirst(person) {
            if ( person[0] == "V") {
                // 那么遍歷現存的數組
                for( var i = 0; i < personArr.length; i++) {
                    // 並且找出數組里普通用戶所在的位置
                    if ( personArr[i][0] == "N") {
                        // splice數組方法,找到當前位置上的普通用戶,0代表不刪除,並在這個普通用戶之前插入這位vip用戶
                        personArr.splice(i, 0, person);
                        // 注意這邊插入后,需返回,否則可能引起無限循環,重復插入,導致瀏覽器奔潰
                        return;
                    }
                }
            }
            // 如果當前的用戶不是VIP用戶的話,那么就按普通先到的用戶排列
            personArr.push(person);
        }
        // 打印當前隊列
        console.log("現存隊列:" + personArr);
        // 設置一個計時器,每5秒執行一次
        var timer = setInterval(listMove, 5000);
        
        function listMove() {
            // 刪除數組第一位,並將這個值返回給firstPer
            var firstPer = personArr.shift();
            // 打印出來當前叫號的客戶
            console.log("叫號:" + firstPer);

            // 隨機再來一個用戶
            var newper = autoPerson();
            // 打印當前新來的客戶編號
            console.log("新人:" + newper);
            // 將新來的客戶如果是vip用戶,就插入到普通用戶前
            vipFirst(newper);
            // 再次打印當前的隊列
            console.log("現存隊形:" + personArr);
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM