????? 個人簡介:一個不甘平庸的平凡人??
??? Nodejs專欄:Node.js從入門到精通
??? TS知識總結:十萬字TS知識點總結
?? 你的一鍵三連是我更新的最大動力??!
?? 歡迎私信博主加入前端交流群??
?? 前言
上篇文章已經對大學組的十道題做了解析,有的小伙伴私信我說能不能出一篇職業(yè)院校組的解析,我去看了一下職業(yè)院校組模擬賽的題,發(fā)現(xiàn)就只有三道題與大學組的不同,于是這里就針對性的講一下這三題,其它題的解析見大學組題解:Web 應用開發(fā)模擬賽 1 期-大學組 | 精品題解
1?? 回文字符串
形如 aba,abba 的字符串都是回文字符串。另外,單字符串、空字符串也是一種特殊的回文字符串哦。
題非常的簡單,直接上代碼:
function isPalindromeStr(str) {
// 在這里寫入具體的實現(xiàn)邏輯
// 返回值是 boolean 類型, 如果是回文字符串應該返回 true, 否則返回 false
return typeof str === "string" && (!str || str === [...str].reverse().join(''))
};
module.exports = isPalindromeStr; // 檢測需要請勿刪除
-
!str
用來處理空字符串的情況(!""
的結果為true
)。 -
[...str].reverse().join('')
代表將str
轉換為數(shù)組,然后通過數(shù)組的reverse
方法反轉,最后再通過join
轉回字符串。
如果你感覺上面一行代碼的形式不太好理解,可以看下面的解法:
function isPalindromeStr(str) {
// 在這里寫入具體的實現(xiàn)邏輯
// 返回值是 boolean 類型, 如果是回文字符串應該返回 true, 否則返回 false
if(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 fasle
return false
}
}
return true
};
module.exports = isPalindromeStr; // 檢測需要請勿刪除
簡單的使用循環(huán),來從兩頭向里開始判斷是否相等,不過這種寫法還可以在性能上再優(yōu)化一下:
function isPalindromeStr(str) {
// 在這里寫入具體的實現(xiàn)邏輯
// 返回值是 boolean 類型, 如果是回文字符串應該返回 true, 否則返回 false
if(typeof str !== "string") return false;
if (!str) return true;
let strLength = str.length; // 存儲數(shù)組長度
let halfLength = Math.ceil(strLength / 2); // 數(shù)組的一半長度(向上取整)
for (let i = 0; i < halfLength; i++) {
if (str[i]! == str[strLength - i - 1]) {
return false
}
}
return true
};
module.exports = isPalindromeStr; // 檢測需要請勿刪除
- 因為是從兩頭向里進行遍歷,所以不需要遍歷整個字符串,只需遍歷一半即可,這樣在極端情況(
str
是回文字符串時)下就能節(jié)約一半的遍歷時間。 - 通過一個
strLength
變量存儲字符串的長度,之后在需要使用字符串長度的地方替換使用strLength
,這樣能避免頻繁訪問str
所造成的性能影響,不過這種影響是微乎其微的,這里只是想到了,所以就簡單說一下。
2?? 別抖了(防抖函數(shù))
讓寫一個防抖函數(shù),防抖和節(jié)流是必備的基礎知識,要注意防抖和節(jié)流是兩種不同的方式:
- 防抖:指觸發(fā)事件后在 n 秒內函數(shù)只能執(zhí)行一次,如果在 n 秒內又觸發(fā)了事件,則會重新計算函數(shù)執(zhí)行時間。
- 節(jié)流:指連續(xù)觸發(fā)事件但是在 n 秒中只執(zhí)行一次函數(shù)。
代碼:
function debounce(fn, delay = 0) {
// TODO: 在這里寫入具體的實現(xiàn)邏輯
// 返回一個新的防抖函數(shù)
// 即使函數(shù)在 delay 時間段內多次被調用,也只會在最后一次函數(shù)被調用的 delay 時間結束后執(zhí)行
let timer = null;
return function (...args) {
if (timer) clearTimeout(timer);
timer = setTimeout(()=>{
fn(...args)
},delay)
}
}
module.exports = debounce; // 檢測需要,請勿刪除
這是最簡單的防抖函數(shù),在復雜的情況下書寫防抖函數(shù)時是需要注意到原函數(shù)this
指向,是否立即執(zhí)行,是否能取消執(zhí)行等多種情況。
3?? 分陣營,比高低
原本的學生數(shù)據(jù)格式:
[
{
name: "瀟然",
class: 2, // 班級
math: 110, // 數(shù)學成績
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: 在這里寫入具體的實現(xiàn)邏輯
// 將學生的成績按班級分組,同一班級中按照總分從高到底排序
let obj = {};
// 將數(shù)據(jù)分班
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應用開發(fā)模擬賽 1 期的所有題解就全部完成了,如果大家有問題,歡迎評論區(qū)留言,也歡迎私信我加入我們的前端技術交流群。
模擬賽 1 期距離結束就剩1天的時間了,沒完成的小伙伴要抓緊時間了。
如果本篇文章對你有所幫助,還請客官一件四連!??
文章來源:http://www.zghlxwxcb.cn/news/detail-781049.html
?? 歡迎私信博主加入前端交流群??文章來源地址http://www.zghlxwxcb.cn/news/detail-781049.html
到了這里,關于【藍橋杯Web】第十四屆藍橋杯(Web 應用開發(fā))模擬賽 1 期-職業(yè)院校組 | 精品題解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!