收款定制开发【蓝桥杯Web】第十四届蓝桥杯(Web 应用开发)模拟赛 1 期-职业院校组 | 精品题解


🧑‍💼 个人简介:收款定制开发一个不甘平庸的平凡人🍬
🖥️ Nodejs专栏:
🖥️ TS知识总结:
👉 收款定制开发你的一键三连是我更新收款定制开发的最大动力❤️!
📢 收款定制开发欢迎私信博主加入前端交流群🌹


📑 目录

🔽 前言

收款定制开发上篇文章已经对大学组收款定制开发的十道题做了解析,收款定制开发有的小伙伴私信我说能收款定制开发不能出一篇职业院校组的解析,收款定制开发我去看了一下职业院校收款定制开发组模拟赛的题,发现就只有三道题与大学组的不同,于是这里就针对性的讲一下这三题,其它题的解析见大学组题解:

1️⃣

形如 ,abba 的字符串都是回文字符串。另外,单字符串、空字符串也是一种特殊的回文字符串哦。

题非常的简单,直接上代码:

function isPalindromeStr(str) {  // 在这里写入具体的实现逻辑  // 返回值是 boolean 类型, 如果是回文字符串应该返回 true, 否则返回 false   return typeof str === "string" && (!str || str === [...str].reverse().join(''))};module.exports = isPalindromeStr; // 检测需要请勿删除
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • !str 用来处理空字符串的情况(!""的结果为true)。
  • [...str].reverse().join('') 代表将str转换为数组,然后通过数组的reverse方法反转,最后再通过join转回字符串。

如果你感觉上面一行代码的形式不太好理解,可以看下面的解法:

function isPalindromeStr(str) {  // 在这里写入具体的实现逻辑  // 返回值是 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; // 检测需要请勿删除
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

简单的使用循环,来从两头向里开始判断是否相等,不过这种写法还可以在性能上再优化一下:

function isPalindromeStr(str) {  // 在这里写入具体的实现逻辑  // 返回值是 boolean 类型, 如果是回文字符串应该返回 true, 否则返回 false  if(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; // 检测需要请勿删除
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 因为是从两头向里进行遍历,所以不需要遍历整个字符串,只需遍历一半即可,这样在极端情况(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; // 检测需要,请勿删除
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

这是最简单的防抖函数,在复杂的情况下书写防抖函数时是需要注意到原函数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,  },  // ...];
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

题目要求我们转换成下面的格式:

// 返回的结果对象:// 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: [    // ...  ],};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

代码:

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; // 检测需要,请勿删除
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

🔼 结语

至此,第十四届蓝桥杯Web应用开发模拟赛 1 期的所有题解就全部完成了,如果大家有问题,欢迎评论区留言,也欢迎私信我加入我们的前端技术交流群

模拟赛 1 期距离结束就剩1天的时间了,没完成的小伙伴要抓紧时间了。

如果本篇文章对你有所帮助,还请客官一件四连!❤️

📢 欢迎私信博主加入前端交流群🌹

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发