博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS 基础: toLowerCase 和 toUpperCase 的实现
阅读量:6079 次
发布时间:2019-06-20

本文共 1480 字,大约阅读时间需要 4 分钟。

一、 一道题引发的思考

今日在leetCode 刷算法题,遇到一道题:

clipboard.png

原题链接:

此题要求实现一个大写转小写的函数,当时脑海中第一时间浮现的是,js不是提供了一个

toLowerCase函数么?于是我毫不犹豫的写下了答案:

/** * @param {string} str * @return {string} */var toLowerCase = function(str) {    return str.toLowerCase();};

but,我想事情没有这么简单,除非作者脑袋被门挤了,于是我就思考,js的toLowerCase 是如何实现的?

二、ASCII编码

查阅资料后我知道了,计算机所有的字符都基于ASCII编码,下面是ASCII 基础编码的映射表:

clipboard.png

此时,我们不难发现,A-Z 和 a-z 的 ASCII 编码的十进制刚好相差32,于是我们的实现思路就是将大写的转成十进制编码,再转换成小写字母的十进制编码,最后得到小写字母。js有两个函数能实现这两种转换:

String.fromCharCode(num1, ..., numN) //把编码转换成对应的字符串str.charCodeAt(index)  //获取字符串的编码

下面,我们就动手实现。

三、代码实现:

  • toLowerCase():
/** * @param {string} str * @return {string} */var toLowerCase = function(str) {  // ASCII 编码大写小写相差32  let arr = str.split('');  let AscCode;  let maxCode = 'Z'.charCodeAt();  let minCode = 'A'.charCodeAt();  for (let i = 0; i < arr.length; i++) {    // 转换为ASCII码    AscCode = arr[i].charCodeAt();    // 大写字母,转小写    if (maxCode >= AscCode && minCode <= AscCode) {      arr[i] = String.fromCharCode(AscCode+32);    }  }  return arr.join('');};
  • toUpperCase():
/** * @param {string} str * @return {string} */var toUpperCase = function(str) {  // ASCII 编码大写小写相差32  let arr = str.split('');  let AscCode;  let maxCode = 'z'.charCodeAt();  let minCode = 'a'.charCodeAt();  for (let i = 0; i < arr.length; i++) {    // 转换为ASCII码    AscCode = arr[i].charCodeAt();    // 大写字母,转大写    if (maxCode >= AscCode && minCode <= AscCode) {      arr[i] = String.fromCharCode(AscCode-32);    }  }  return arr.join('');};
本人刷题库,感兴趣的可以交流:

转载地址:http://fghgx.baihongyu.com/

你可能感兴趣的文章
jQuery 基础之1
查看>>
.NET微信公众号开发-5.0微信支付
查看>>
C# 编写Windows服务、部署、启动以及卸载
查看>>
Oracle的select检索数据
查看>>
企业的组织机构代码javascript脚本校验
查看>>
Python简单爬虫入门二
查看>>
不关闭seLinux解决vsftpd服务本地用户不能登录问题(500 OOPS: cannot change directory:/home/***)...
查看>>
【第一阶段】第二周作业
查看>>
将多个Excel文件合并成一个excel文件
查看>>
项目Beta冲刺
查看>>
Unity与安卓IOS交互
查看>>
oracle dba比较好的书籍
查看>>
在MyEclipse中debug使用手册
查看>>
怎么让研发做好他们不重视但是对测试很重要的事情? 致
查看>>
UVa - 12096 The SetStack Computer(STL容器综合,强推!)
查看>>
斐波那契数列规律的解释及实现
查看>>
Mono ASP.NET core 添加 Entity Framework
查看>>
iOS 什么是函数式编程
查看>>
安卓 碎片 如何实现类似 活动 栈的 进栈 出栈
查看>>
参数请求post, get , delete中的基本使用(2)
查看>>