我正在尝试将字符串中每个单词的第一个字母大写。我想分三步完成:
但出了点问题,我无法进入第3步。 for循环确实将字母更改为大写,但是当我返回变量cap时,它只返回字符串中最后一个单词的第一个大写字母。在示例中它是P(最后一个词是底池),如果我擦除底池它返回T(因为茶成为最后一个单词)。
为什么cap变量不会以大写的第一个字母返回整个数组?我错过了什么?
以下是代码:
function titleCase(str) {
var arr = str.split(" ");
for (i = 0; i < arr.length; i++) {
var cap = arr[i][0].toUpperCase();
}
return cap;
}
titleCase("I'm a little tea pot");
答案 0 :(得分:3)
那是因为你只是返回一个cap变量,它将包含最后一个单词的第一个字母大写(左上一个迭代)。
function titleCase(str) {
var arr = str.split(" ");
for (i = 0; i < arr.length; i++) {
var word = arr[i];
// capitalized first letter + rest of the word
var capitalizedWord = word[0].toUpperCase() + word.slice(1);
arr[i] = capitalizedWord; // replace the uncapitalized word with capitalized one
}
return arr.join(" "); // join with spaces to make it a sentence again
}
titleCase("I'm a little tea pot");
答案 1 :(得分:1)
这是因为cap
只是一个变量,所以当你循环翻译你的单词时,它会被下一个单词的第一个字母覆盖。使它成为一个数组或将下一个字母连接到它上面。
答案 2 :(得分:0)
我认为这就是答案:
const capitalizeFirst = data => data.replace(/[\w']+/g, x => x[0].toUpperCase() + x.slice(1).toLowerCase())
console.log(capitalizeFirst("I'm a little tea pot"))
&#13;
答案 3 :(得分:0)
您在每次迭代中覆盖变量cap
。
您的代码略有修改:
function titleCase(str) {
var arr = str.split(" ");
var cap = "";
for (i = 0; i < arr.length; i++) {
if (i != arr.length - 1) {
cap += arr[i][0].toUpperCase() + arr[i].substr(1) + " ";
} else {
cap += arr[i][0].toUpperCase() + arr[i].substr(1);
}
}
return cap;
}
titleCase("I'm a little tea pot");
答案 4 :(得分:0)
你犯了Javascript的主要罪行!不要在循环中声明变量。
window.onresize = function(){ // may not be the window object
if (screen.width < 1280) { // many ways of detecting screen width
var sections = document.querySelectorAll("section"); // create array of all section elements
for (var i = 0; i <= sections.length-1; i++) { // loop through them
sections[i].classList.remove("parallax"); // remove their parallax class
};
};
};
输入您所写的内容是正确的方法。
当你的for循环在你的例子中迭代时,它每次重新声明变量,这会导致一些不好的事情发生。在我的例子中,每次都重新定义它,但只声明一次。
但是,这对您的问题仍然不正确。这只会在您想要整个字符串时为您提供单个字母。试试这样的事情
function titleCase(str) {
var cap;
var arr = str.split(" ");
for (i = 0; i < arr.length; i++) {
cap = arr[i][0].toUpperCase();
}
return cap;
}
有更优雅的方法来解决这个问题,但希望这里分解的所有步骤都可以帮助你理解你的循环正在做什么和应该做什么。
祝你好运!答案 5 :(得分:0)
ES2015解决方案:
const titleCase = str =>
str.split(' ').map(word =>
word.charAt(0).toUpperCase() + word.slice(1)
).join(' ');
titleCase("I'm a little tea pot"));