关于 toUpperCase 方法,我缺少什么?

问题描述

我试图通过 useEffect(() => { setonScreenUsers( users.filter((user) => { if (!userFilterQ && !roleFilterQ) return true; const filterValue = userFilterQ.toLowerCase(); return ( user.user.name.toLowerCase().includes(filterValue) || user.user.email.toLowerCase().includes(filterValue) || user.user.role[roleFilterQ] // roleFilterQ one of "hr","manager","admin" ); }) ); },[userFilterQ,users]); 方法使每个单词的第一个字母大写,而单词的其余部分则通过 role 方法小写。但是我遗漏了一些东西...为什么 toupperCase 值与 toLowerCase 不匹配,即使我对两者都使用该方法

注意:我知道我的解决方案的其他方法tempresult[1][0] 等),但我只想使用带有 map 和 {{1} 的 for 循环} 方法

replace

解决方法

您的问题不在于 toUppercase(),而在于引用。

在引用 result[1][0] 时,为什么要包含 0?您已经有了带有 result[1]

的第二个字符

result[1] === 'a'。也不需要包括 [0]。

更改您的代码,使其看起来像这样:

function titleCase(str) {
    let regex = /[^0-9\s]+/g;
    var result = str.match(regex);
    let temp = "";
    
    result[1] = result[1].toUpperCase();
    temp = result[1].toUpperCase();
  
    console.log(temp); // Output is 'A'
    console.log(result[1]); //Output is also 'A'
    // both now equals capital A
    return str;
  }
  
  titleCase("I'm a little tea pot");

编辑: 将函数更新为大写单词的第一个字母。

我们可以使用 ES6,这会使这变得非常简单:

const capitalize = (string = '') => [...string].map((char,index) => index ? char : char.toUpperCase()).join('')  

使用它:capitalize("hello") 返回 'Hello'。

首先,我们使用扩展运算符将字符串转换为数组,以将每个字符作为字符串单独获取。然后我们映射每个字符以获取索引以对其应用大写。索引 true 表示不等于 0,因此 (!index) 是第一个字符。然后我们对其应用大写函数,然后返回字符串。


如果您想要更面向对象的方法,我们可以这样做:

String.prototype.capitalize = function(allWords) {
    return (allWords) ?
    this.split(' ').map(word => word.capitalize()).join(' ') : 
    return this.charAt(0).toUpperCase() + this.slice(1);
}

使用它:"hello,world!".capitalize(); 返回“Hello,World”

我们将短语分解为单词,然后递归调用,直到将所有单词大写。如果 allWords 未定义,则仅将第一个单词大写,表示整个字符串的第一个字符。

,

我试图更改字符串中的特定字符,但字符串在 JS 中是不可变的,所以这没有意义。