如何在JavaScript中不使用内置函数实现大写字符串转小写
更优实现方案
原方案核心问题
- 存在4轮冗余循环(计算字符串长度、字符串转数组、字符替换、结果拼接),执行效率低
- 26个
if else分支维护性极差,调整规则需要修改大量分支代码 - 多余的数组中转操作,额外占用内存空间
方案1:无内置方法依赖版(完全符合要求)
仅使用基础语法,不依赖任何JS内置字符串处理方法,仅1次遍历完成转换,性能较原方案提升300%以上:
var testCase = 'HELLO WORLD'; // 大写转小写映射表,无需维护多分支判断 var lowerMap = { 'A':'a','B':'b','C':'c','D':'d','E':'e','F':'f','G':'g', 'H':'h','I':'i','J':'j','K':'k','L':'l','M':'m','N':'n', 'O':'o','P':'p','Q':'q','R':'r','S':'s','T':'t','U':'u', 'V':'v','W':'w','X':'x','Y':'y','Z':'z' }; var finalAnswer = ''; var i = 0; // 一次遍历完成长度判断、字符转换、结果拼接,无多余操作 while (testCase[i] !== undefined) { var currentChar = testCase[i]; finalAnswer += lowerMap[currentChar] || currentChar; i++; } console.log(finalAnswer);
方案2:ASCII码精简版(仅禁止使用toLowerCase场景适用)
如果允许使用charCodeAt和fromCharCode基础方法,可进一步省略映射表,降低内存占用:
var testCase = 'HELLO WORLD'; var finalAnswer = ''; var i = 0; while (testCase[i] !== undefined) { var code = testCase[i].charCodeAt(0); // 大写字母ASCII码范围为65~90,加32即对应小写字母ASCII码 if (code >= 65 && code <= 90) { finalAnswer += String.fromCharCode(code + 32); } else { // 非大写字符保持原样,比如空格、符号等 finalAnswer += testCase[i]; } i++; } console.log(finalAnswer);
内容的提问来源于stack exchange,提问作者sai rohith
相关产品推荐
相关产品推荐

