【蓝桥杯Web】第十四届蓝桥杯(Web 应用开发)模拟赛 1 期-职业院校组 | 精品题解
🧑?💼 個人簡介:一個不甘平庸的平凡人🍬
🖥? Nodejs專欄:Node.js從入門到精通
🖥? TS知識總結:十萬字TS知識點總結
👉 你的一鍵三連是我更新的最大動力??!
📢 歡迎私信博主加入前端交流群🌹
📑 目錄
- 🔽 前言
- 1?? 回文字符串
- 2?? 別抖了(防抖函數)
- 3?? 分陣營,比高低
- 🔼 結語
🔽 前言
上篇文章已經對大學組的十道題做了解析,有的小伙伴私信我說能不能出一篇職業院校組的解析,我去看了一下職業院校組模擬賽的題,發現就只有三道題與大學組的不同,于是這里就針對性的講一下這三題,其它題的解析見大學組題解:Web 應用開發模擬賽 1 期-大學組 | 精品題解
1?? 回文字符串
形如 aba,abba 的字符串都是回文字符串。另外,單字符串、空字符串也是一種特殊的回文字符串哦。
題非常的簡單,直接上代碼:
function isPalindromeStr(str) {// 在這里寫入具體的實現邏輯// 返回值是 boolean 類型, 如果是回文字符串應該返回 true, 否則返回 falsereturn typeof str === "string" && (!str || str === [...str].reverse().join('')) }; module.exports = isPalindromeStr; // 檢測需要請勿刪除- !str 用來處理空字符串的情況(!""的結果為true)。
- [...str].reverse().join('') 代表將str轉換為數組,然后通過數組的reverse方法反轉,最后再通過join轉回字符串。
如果你感覺上面一行代碼的形式不太好理解,可以看下面的解法:
function isPalindromeStr(str) {// 在這里寫入具體的實現邏輯// 返回值是 boolean 類型, 如果是回文字符串應該返回 true, 否則返回 falseif(typeof str !== "string") return false;if (!str) return true;for (let i = 0; i < str.length; i++) {if (str[i] !== str[str.length - i - 1]) {// 但凡有不相等的就直接return faslereturn false}}return true };module.exports = isPalindromeStr; // 檢測需要請勿刪除簡單的使用循環,來從兩頭向里開始判斷是否相等,不過這種寫法還可以在性能上再優化一下:
function isPalindromeStr(str) {// 在這里寫入具體的實現邏輯// 返回值是 boolean 類型, 如果是回文字符串應該返回 true, 否則返回 falseif(typeof str !== "string") return false;if (!str) return true;let strLength = str.length; // 存儲數組長度let halfLength = Math.ceil(strLength / 2); // 數組的一半長度(向上取整)for (let i = 0; i < halfLength; i++) {if (str[i]! == str[strLength - i - 1]) {return false}}return true };module.exports = isPalindromeStr; // 檢測需要請勿刪除- 因為是從兩頭向里進行遍歷,所以不需要遍歷整個字符串,只需遍歷一半即可,這樣在極端情況(str是回文字符串時)下就能節約一半的遍歷時間。
- 通過一個strLength變量存儲字符串的長度,之后在需要使用字符串長度的地方替換使用strLength ,這樣能避免頻繁訪問str所造成的性能影響,不過這種影響是微乎其微的,這里只是想到了,所以就簡單說一下。
2?? 別抖了(防抖函數)
讓寫一個防抖函數,防抖和節流是必備的基礎知識,要注意防抖和節流是兩種不同的方式:
- 防抖:指觸發事件后在 n 秒內函數只能執行一次,如果在 n 秒內又觸發了事件,則會重新計算函數執行時間。
- 節流:指連續觸發事件但是在 n 秒中只執行一次函數。
代碼:
function debounce(fn, delay = 0) {// TODO: 在這里寫入具體的實現邏輯// 返回一個新的防抖函數// 即使函數在 delay 時間段內多次被調用,也只會在最后一次函數被調用的 delay 時間結束后執行let timer = null;return function (...args) {if (timer) clearTimeout(timer);timer = setTimeout(()=>{fn(...args)},delay)} }module.exports = debounce; // 檢測需要,請勿刪除這是最簡單的防抖函數,在復雜的情況下書寫防抖函數時是需要注意到原函數this指向,是否立即執行,是否能取消執行等多種情況。
3?? 分陣營,比高低
原本的學生數據格式:
[{name: "瀟然",class: 2, // 班級math: 110, // 數學成績language: 92, // 語文成績english: 114, // 英語成績physics: 56, // 物理成績chemistry: 74, // 化學成績},{name: "張三",class: 1,math: 100,language: 80,english: 60,physics: 80,chemistry: 60,},// ... ];題目要求我們轉換成下面的格式:
// 返回的結果對象: // key 是班級號,同一個班級中學生成績降序排列 {1: [{name: "瀟然",class: 1,math: 110,language: 92,english: 114,physics: 56,chemistry: 74,},{name: "張三",class: 1,math: 10,language: 8,english: 60,physics: 8,chemistry: 60,},// ...],2: [// ...], };代碼:
function orderStudentGrade(students) {// TODO: 在這里寫入具體的實現邏輯// 將學生的成績按班級分組,同一班級中按照總分從高到底排序let obj = {};// 將數據分班students.forEach((item) => {obj[item.class]? obj[item.class].push(item): (obj[item.class] = [item]);});// 排序 for (const key in obj) {obj[key].sort((a,b)=>{let aCount = a.math + a.language + a.english + a.physics + a.chemistry;let bCount = b.math + b.language + b.english + b.physics + b.chemistry;return bCount - aCount})}return obj }module.exports = orderStudentGrade; // 檢測需要,請勿刪除🔼 結語
至此,第十四屆藍橋杯Web應用開發模擬賽 1 期的所有題解就全部完成了,如果大家有問題,歡迎評論區留言,也歡迎私信我加入我們的前端技術交流群。
模擬賽 1 期距離結束就剩1天的時間了,沒完成的小伙伴要抓緊時間了。
如果本篇文章對你有所幫助,還請客官一件四連!??
📢 歡迎私信博主加入前端交流群🌹
總結
以上是生活随笔為你收集整理的【蓝桥杯Web】第十四届蓝桥杯(Web 应用开发)模拟赛 1 期-职业院校组 | 精品题解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联想安装Ubuntu16.04LTS(双
- 下一篇: 数据库的锁事务