我的函数旨在将每个单词的首字母大写,但是在for循环运行之后,数组未更改。我想念什么?
function capitalize(str) {
var splitStr = str.split(' ');
for (let i = 0; i < splitStr.length; i++) {
var word = splitStr[i];
word = word[0].toUpperCase() + word.slice(1);
}
return splitStr.join(' ');
}
console.log(capitalize('my test'));
答案 0 :(得分:3)
只需将word =
替换为splitStr[i]
,就可以完成
function capitalize(str) {
var splitStr = str.split(' ');
for (let i = 0; i < splitStr.length; i++) {
var word = splitStr[i];
splitStr[i] = word[0].toUpperCase() + word.slice(1);
}
return splitStr.join(' ');
}
console.log(capitalize("this is it"));
原因:因为您没有使用原始字符串splitStr
更新它。 toUpperCase
不会修改原始元素,但会返回更新后的值,因此您需要将其分配回该特定的字符串索引以进行修改。
答案 1 :(得分:2)
将值分配回数组本身
这是可行的解决方案-
function capitalize(str) {
var splitStr = str.split(' ');
for (let i = 0; i < splitStr.length; i++) {
var word = splitStr[i];
splitStr[i] = word[0].toUpperCase() + word.slice(1);
}
return splitStr.join(' ');
}
console.log(capitalize("stack over flow"));
答案 2 :(得分:1)
执行此操作
var word = splitStr[i];
您没有获得对索引的引用,因此当您更新word时,它不会更新数组的索引。
splitStr[i] = word[0].toUpperCase() + word.slice(1);
答案 3 :(得分:1)
您需要通过将索引i的数组设置为等于某个值(而不是相反)来更改数组的值。
javac.target
答案 4 :(得分:1)
您需要实际更改它,而不是参考每个单词。一种选择是使用 function capitalize(str) {
var splitStr = str.split(' ');
for (let i = 0; i < splitStr.length; i++) {
var word = splitStr[i];
splitStr[i] = word[0].toUpperCase() + word.slice(1);
}
return splitStr.join(' ');
}
重新分配:
map
答案 5 :(得分:0)
`var word = splitStr[i];
word = word[0].toUpperCase() + word.slice(1);`
应该跟随修改原始字符串
`var word = splitStr[i];
splitStr[i] = word[0].toUpperCase() + word.slice(1);`
我走得更远,并删除了中间变量word
function capitalize(str) {
var splitStr = str.split(' ');
for (let i = 0; i < splitStr.length; i++) {
splitStr[i] = splitStr[i][0].toUpperCase() + splitStr[i].slice(1);
}
return splitStr.join(' ');
}
console.log(capitalize("Hello, i am here"));