为了账号安全,请及时绑定邮箱和手机立即绑定

单行代码算法解答(一)

标签:
算法

webp

在实际工作当中,我们常常需要对数据进行处理,比如简单的数组元素相加,字符串的倒序排列等等。如果使用C语言来解答此类问题,我们需要用到一些底层的算法逻辑,使用基础的for循环和if判断等来解决。但是,在JS这门语言中,它本身就给我们提供了很多处理字符串和数组等数据结构的函数方法,这给我们解决此类问题带来了很多便利,下面我就以几个简单的例子来为大家展示如何使用单行代码解答算法

1. 获取最大值和最小值

编写函数highAndLow(), 获取数字组成的字符串中的最大值和最小值,用空格隔开并返回,要求实现以下结果:

highAndLow("1 2 3 4 5"); // "5 1"highAndLow("1 2 -3 4 5"); // "5 -3"highAndLow("1 9 3 4 -5"); // "9 -5"

一行代码解答:

let highAndLow = (numbers) => `${Math.max(...numbers.split(' '))} ${Math.min(...numbers.split(' '))}`;

算法解析:

numbers.split(' ') —— 用于将字符串拆分为数组
...numbers.split(' ') —— 【ES6语法】扩展运算符(...),用于将数组展开,展开的每一项作为参数传入Math.max()中
Math.max()Math.min() —— 分别用于求解数组项的最大值和最小值
${} —— 【ES6语法】模板字符串,用于在字符串(用反引号`引用)中写入变量

2. 单词首字母大写

编写函数toJadenCase(), 将英语句子中每个单词首字母改为大写,要求实现以下结果:

var str = "how can mirrors be real if our eyes aren't real";  
console.log(str.toJadenCase());   // "How Can Mirrors Be Real If Our Eyes Aren't Real"

一行代码解答:

String.prototype.toJadenCase = function(){ return this.replace(/(^|\s)[a-z]/g, x => x.toUpperCase()) };

算法解析:

/(^|\s)[a-z]/g —— 正则表达式,其中 ^ 表示字符串起始位置,\s 表示空格,[a-z] 表示单个小写字母,g 表示全局匹配
toUpperCase() —— 用于将字符串转换为大写
replace() —— 用于字符串的替换,更多用法可参见 简述test()、match()、replace()和search()的用法

3. 驼峰式命名转换

编写函数toCamelCase(),  实现驼峰式命名转换,要求实现以下结果:

toCamelCase("")   // ""toCamelCase("the-stealth-warrior")   // "theStealthWarrior"toCamelCase("The_Stealth_Warrior")   // "TheStealthWarrior"

一行代码解答:

let toCamelCase = str => str.replace(/(\-|_)([a-z]|[A-Z])/g, w => w.toUpperCase().slice(1));

算法解析:

/(-|_)([a-z]|[A-Z])/g —— 正则表达式,其中 \- 表示字符 -(加反斜杠是用来转义,因为短横杠 - 为正则元字符),[a-z] 表示单个小写字母,[A-Z] 表示单个大写写字母,g 表示全局匹配
slice() —— 用于字符串的裁剪,具体用法详见 JavaScript字符串“三剑客”

4. 句子中最短的单词长度

编写函数findShort(), 获取英文句子中最短单词的长度,要求实现以下结果:

findShort("bitcoin take over the world maybe who knows perhaps")   // 3findShort("turns out random test cases are easier than writing out basic ones")  // 3

一行代码解答:

let findShort = s => Math.min(...s.split(" ").map(s => s.length));

算法解析:

map() —— 用于遍历处理数组元素,这里是将数组元素全部转换为数组元素字符串长度

5. 求平均数

编写函数getAverage(), 求解数组中所有项的平均数,最终将该平均数向下取整作为函数返回值,要求实现以下结果:

getAverage([2,2,2,2])  // 2getAverage([1,2,3,4,5,])  // 3getAverage([1,1,1,1,1,1,1,2])   // 1

一行代码解答:

let getAverage = marks => Math.floor(marks.reduce((prev,cur) => prev + cur) / marks.l



作者:前端王睿
链接:https://www.jianshu.com/p/bbf7fadb07e7


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消