CSDN话题挑战赛第2期
参赛话题:学习笔记
🖥️ NodeJS专栏:Node.js从入门到精通
🖥️ 博主的前端之路:前端之行,任重道远(来自大三学长的万字自述)
🧧 个人社区:海底烧烤店ai(从前端到全栈)
🧑💼个人简介:即将大三的学生,一个不甘平庸的平凡人🍬
👉 你的一键三连是我更新的最大动力❤️!
🏆分享博主自用牛客网🏆:一个非常全面的面试刷题求职网站,点击跳转🍬
文章目录
前言
最近博主一直在牛客网刷题巩固基础知识,牛客网不仅具有公司真题、专项练习、面试题库、在线编程等功能,还具有非常强大的AI模拟面试功能,简直是求职者的福音!
牛客网里的题库非常全面的,无论你是前端还是后端,是想要备考还是准备面试又或者是想要提高自己,你都能在牛客网上找到适合自己的题,赶快点击链接去注册登录吧:点我进入牛客网
牛客网牛客网
本篇文章所有示例来自于牛客网
题库/在线编程/JS篇
(46-50题),这些都是前端开发中常用的功能,借此记录一下刷题过程,巩固基础
一、 时间格式化输出
描述: 按所给的时间格式输出指定的时间,格式说明如下
对于 2014.09.05 13:14:20
yyyy: 年份,2014
yy: 年份,14
MM: 月份,补满两位,09
M: 月份, 9
dd: 日期,补满两位,05
d: 日期, 5
HH: 24制小时,补满两位,13
H: 24制小时,13
hh: 12制小时,补满两位,01
h: 12制小时,1
mm: 分钟,补满两位,14
m: 分钟,14
ss: 秒,补满两位,20
s: 秒,20
w: 星期,为 [‘日’, ‘一’, ‘二’, ‘三’, ‘四’, ‘五’, ‘六’] 中的某一个,本 demo 结果为 五
示例:
输入:formatDate(new Date(1409894060000), 'yyyy-MM-dd HH:mm:ss 星期w')
输出:2014-09-05 13:14:20 星期五
这个例子实际就是让我们手写一个处理日期的
formatDate
函数,话不多说,开撕!
functionformatDate(data, str){const obj ={yyyy: data.getFullYear(),yy: data.getFullYear().toString().slice(-2),MM:addZero(data.getMonth()+1),M: data.getMonth()+1,dd:addZero(data.getDate()),d: data.getDate(),HH:addZero(data.getHours()),H: data.getHours(),hh:addZero(data.getHours()%12),h: data.getHours()%12,mm:addZero(data.getMinutes()),m: data.getMinutes(),ss:addZero(data.getSeconds()),s: data.getSeconds(),w:["日","一","二","三","四","五","六"][data.getDay()],};return str.replace(/([a-z]+)/gi,function(is){return obj[is];});}// 前面补零的函数functionaddZero(num){return num <10?"0"+ num.toString(): num;}
formatDate
函数中定义了一个含有各种日期情况属性的
obj
对象,根据不同的属性返回相应的结果,这很简单就不必多说了。
需要注意的就是
formatDate
函数中replace的用法:
- 接收的第一个参数为正则:
/([a-z]+)/gi
代表全局不分大小写的匹配一个或多个英文字母,与/([A-z]+)/g
效果一样> +代表至少一个,g代表全局匹配,i代表不区分大小写> [a-z]代表任意小写字母,[A-z]代表任意字母 - 接收的第二个参数是一个函数。在这种情况下,当匹配执行后,该函数就会执行。 函数的返回值作为替换字符串。 另外要注意的是,如果第一个参数是正则表达式,并且其为全局匹配模式,那么这个方法将被多次调用,每次匹配都会被调用。> 这个函数的参数就是匹配到的字符
二、根据编码形式获取字符串的长度
要求: 如果第二个参数
bUnicode255For1 === true
,则所有字符长度为 1,否则如果字符
Unicode 编码 > 255
则字符长度为 2
示例:
输入:'hello world, 牛客',false
输出:17
上边共输入15个字符,输入的字符中牛客两个字的
Unicode 编码
大于255,则其字符长度取2,其它13个字符的长度取1,所以最终字符串长度为13+2x2=17
解:
functionstrLength(s, bUnicode255For1){let l = s.length;if(bUnicode255For1 !==true){for(let i in s){if(s.charCodeAt(i)>255) l++;}}return l;}
- 对字符串进行
for in
遍历,其中的i
即为当前遍历字符的索引 str.charCodeAt(index)
方法返回 0 到 65535 之间的整数,表示字符串str
给定索引(index)处的UTF-16
代码单元即Unicode编码
值
strLength
函数整体的思路就是,先获取字符串的长度,然后遍历判断字符串的每一个字符,有
Unicode 编码 > 255
的出现时,总长度就加1
三、邮箱字符串判断
要求: 判断输入是否是正确的邮箱格式
简单的使用正则表达式进行匹配即可:
functionisAvailableEmail(sEmail){var reg=/^([\w+\.])+@\w+([.]\w+)+$/;return reg.test(sEmail);}
四、 统计数据出现次数
要求: 统计数组
arr
中值等于
item
的元素出现的次数
functioncount(arr, item){let num =0;
arr.forEach((ite)=>{if(ite === item){
num++;}});return num;}
利用
ES6
的
filter
函数,一行代码解决:
functioncount(arr, item){return arr.filter((el)=> el == item).length;}
filter()
方法创建给定数组一部分的浅拷贝,其包含通过所提供函数实现的测试的所有元素。通常用来过滤数组。
五、查找数组重复元素
要求: 找出数组 arr 中重复出现过的元素(不用考虑返回顺序)
示例:
输入:[1, 2, 4, 4, 3, 3, 1, 5, 3]
输出:[1, 3, 4]
看到这种需求时,我的第一个思路就是使用
Set
集合:
- 定义两个
Set
集合,一个用来存放过滤掉重复数据的原数据,一个用来存放重复出现过的元素
functionduplicates(arr){// 过滤掉重复项后的原数据let notRepeating =newSet();// 存放重复出现过的数据let Repeat =newSet();// 遍历原数组
arr.forEach((item)=>{if(notRepeating.has(item)){// 若notRepeating中已经含有该元素,则存到Repeat中
Repeat.add(item);}else{
notRepeating.add(item);}});return Array.from(Repeat);}
也可以使用
indexOf()
和
lastIndexOf()
来进行操作:
indexOf()
方法返回在数组中可以找到给定元素的第一个索引,如果不存在,则返回 -1。
lastIndexOf()
方法返回指定元素在数组中的最后一个的索引,如果不存在则返回 -1。
functionduplicates(arr){// 存放重复出现过的数据let Repeat =[];
arr.forEach((item)=>{// 当元素第一次出现的位置与最后一次出现的位置不相等,代表该元素重复出现了// 该元素重复出现了且Repeat数组中不含该元素,则向Repeat中添加该元素if(
arr.indexOf(item)!== arr.lastIndexOf(item)&&
Repeat.indexOf(item)===-1){
Repeat.push(item);}});return Repeat
}
结语
这篇文章的所有内容都出自于牛客网的JS篇题库:
牛客网的
JS
题库非常贴合实际的,在写的过程中自己查漏补缺,收获了很多,强烈将牛客网推荐给大家!
如果本篇文章对你有所帮助,还请客官一件四连!❤️
基础不牢,地动山摇! 快来和博主一起来牛客网刷题巩固基础知识吧!
版权归原作者 海底烧烤店ai 所有, 如有侵权,请联系我们删除。