我愛擼碼,擼碼使我感到快樂!
大家好,我是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); }