软件开发定制【JavaScript】巩固JS开发中五个常用功能/案例(46-50)(牛客题解)


参赛话题:

🖥️ NodeJS专栏:
🖥️ 软件开发定制博主的前端之路:
🧧 个人社区:
🧑‍💼个人简介:软件开发定制即将大三的学生,软件开发定制一个不甘平庸的平凡人🍬
👉 软件开发定制你的一键三连是我更新软件开发定制的最大动力❤️!
🏆软件开发定制分享博主自用牛客网🏆:


文章目录

前言

软件开发定制最近博主一直在牛客网软件开发定制刷题巩固基础知识,不仅具有公司真题专项练习面试题库在线编程等功能,软件开发定制还具有非常强大的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 星期五
  • 1
  • 2

这个例子实际就是让我们手写一个处理日期的formatDate函数,话不多说,开撕!

function formatDate(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];    });}// 前面补零的函数function addZero(num) {    return num < 10 ? "0" + num.toString() : num;}
  • 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

formatDate函数中定义了一个含有各种日期情况属性的obj对象,根据不同的属性返回相应的结果,这很简单就不必多说了。

需要注意的就是formatDate函数中的用法

  • 接收的第一个参数为正则:/([a-z]+)/gi 代表全局不分大小写的匹配一个或多个英文字母,与/([A-z]+)/g 效果一样

    +代表至少一个,g代表全局匹配,i代表不区分大小写
    [a-z]代表任意小写字母,[A-z]代表任意字母

  • 接收的第二个参数是一个函数。在这种情况下,当匹配执行后,该函数就会执行。 函数的返回值作为替换字符串。 另外要注意的是,如果第一个参数是正则表达式,并且其为全局匹配模式,那么这个方法将被多次调用每次匹配都会被调用

    这个函数的参数就是匹配到的字符

二、根据编码形式获取字符串的长度

要求: 如果第二个参数 bUnicode255For1 === true,则所有字符长度为 1,否则如果字符 Unicode 编码 > 255 则字符长度为 2

示例:

输入:'hello world, 牛客', false输出:17
  • 1
  • 2

上边共输入15个字符,输入的字符中牛客两个字的 Unicode 编码大于255,则其字符长度取2,其它13个字符的长度取1,所以最终字符串长度为13+2x2=17

解:

function strLength(s, bUnicode255For1) {    let l = s.length;    if (bUnicode255For1 !== true) {        for (let i in s) {            if (s.charCodeAt(i) > 255) l++;        }    }    return l;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 对字符串进行for in遍历,其中的i即为当前遍历字符的索引
  • str.charCodeAt(index) 方法返回 0 到 65535 之间的整数,表示字符串str给定索引(index)处UTF-16 代码单元即Unicode编码

strLength函数整体的思路就是,先获取字符串的长度,然后遍历判断字符串的每一个字符,有 Unicode 编码 > 255的出现时,总长度就加1

三、邮箱字符串判断

要求: 判断输入是否是正确的邮箱格式

简单的使用正则表达式进行匹配即可:

function isAvailableEmail(sEmail) {    var reg=/^([\w+\.])+@\w+([.]\w+)+$/;    return reg.test(sEmail);}
  • 1
  • 2
  • 3
  • 4
  • 5

四、 统计数据出现次数

要求: 统计数组 arr 中值等于 item 的元素出现的次数

function count(arr, item) {    let num = 0;    arr.forEach((ite) => {        if (ite === item) {            num++;        }    });    return num;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

利用ES6filter函数,一行代码解决:

function count(arr, item) {    return arr.filter((el) => el == item).length;}
  • 1
  • 2
  • 3
  • 4

filter() 方法创建给定数组一部分的浅拷贝,其包含通过所提供函数实现的测试的所有元素。通常用来过滤数组。

五、查找数组重复元素

要求: 找出数组 arr 中重复出现过的元素(不用考虑返回顺序)

示例:

输入:[1, 2, 4, 4, 3, 3, 1, 5, 3]输出:[1, 3, 4]
  • 1
  • 2

看到这种需求时,我的第一个思路就是使用Set集合:

  • 定义两个Set集合,一个用来存放过滤掉重复数据的原数据,一个用来存放重复出现过的元素
function duplicates(arr) {    // 过滤掉重复项后的原数据    let notRepeating = new Set();    // 存放重复出现过的数据    let Repeat = new Set();    // 遍历原数组    arr.forEach((item) => {        if (notRepeating.has(item)) {            // 若notRepeating中已经含有该元素,则存到Repeat中            Repeat.add(item);        } else {            notRepeating.add(item);        }    });    return Array.from(Repeat);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

也可以使用indexOf()lastIndexOf()来进行操作:

indexOf() 方法返回在数组中可以找到给定元素的第一个索引,如果不存在,则返回 -1。
lastIndexOf() 方法返回指定元素在数组中的最后一个的索引,如果不存在则返回 -1。

function duplicates(arr) {    // 存放重复出现过的数据    let Repeat = [];    arr.forEach((item) => {    	// 当元素第一次出现的位置与最后一次出现的位置不相等,代表该元素重复出现了    	// 该元素重复出现了且Repeat数组中不含该元素,则向Repeat中添加该元素        if (            arr.indexOf(item) !== arr.lastIndexOf(item) &&            Repeat.indexOf(item) === -1        ) {            Repeat.push(item);        }    });    return Repeat}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

结语

这篇文章的所有内容都出自于:

牛客网的JS题库非常贴合实际的,在写的过程中自己查漏补缺,收获了很多,强烈将推荐给大家!

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

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