javascript - 为什么 toLowerCase() 不能与 replace() 一起使用?
问题描述
Given 下面是一个简单的函数,用于将句子中的第一个单词大写
例如:INPUT: 'JavaSCRipt is The BEST'
OUTPUT: 'JavaScript Is The Best'
const firstupper = function(str){
const arr = str.split(' ');
const newArr = [];
for(let item of arr){
item = item.toLowerCase();
newArr.push(item.replace(item[0], item[0].toUpperCase()));
}
const newstr = newArr.join(' ');
console.log(newstr);
}
firstupper('javaSCript is THE besT');
PS——这段代码工作正常
为什么我不能小写,然后在单行中替换大写的第一个字母,例如:newArr.push(item.toLowerCase().replace(item[0], item[0].toUpperCase()));
当我使用它编写代码时,如果它是大写,它会将第一个单词更改为小写,反之亦然
例如:INPUT -> 'JAvaScript 是最好的' OUTPUT -> 'javascript 是最好的'
解决方案
因为这改变了逻辑。在这个版本中,操作中的所有读取都是小写的:item
.push()
item = item.toLowerCase();
newArr.push(item.replace(item[0], item[0].toUpperCase()));
但是在这个版本中,只有第一次使用的item
是小写的:
newArr.push(item.toLowerCase().replace(item[0], item[0].toUpperCase()));
对两者的引用item[0]
仍然使用原始外壳。为了使其具有相同的逻辑,您还需要在那里重复大小写更改:
newArr.push(item.toLowerCase().replace(item.toLowerCase()[0], item.toLowerCase()[0].toUpperCase()));
这显然过于混乱并且不必要地重复操作。因此,首选原始工作版本。
推荐阅读
- c++ - unzip.obj 可能缺少哪些库:错误 LNK2019?
- javascript - Css 导致 Angularjs 动态 div 结果到 Jam
- javascript - Vue:如何知道用户选择/突出显示的文本并显示多个实例
- r - 清除全局环境,保留 new.env() 创建的环境
- php - move_uploaded_file( ) 不适用于视频/音频/pdf
- java - 在 Java 中从超类类型的 ArrayList 调用子类方法
- javascript - 未捕获的类型错误:无法将属性“禁用”设置为 null
- python - 将默认包安装到 Conda 虚拟环境中
- java - Guava 的 Charmatcher 方法(如 javaDigit())的替代方案?
- android - 如果不使用接口获取 Firebase 文档,如何返回值?