问题描述
我试图通过 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
不匹配,即使我对两者都使用该方法?
注意:我知道我的解决方案的其他方法(temp
、result[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 中是不可变的,所以这没有意义。