首页 > 解决方案 > 为什么 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 是最好的'

标签: 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()));

这显然过于混乱并且不必要地重复操作。因此,首选原始工作版本。


推荐阅读