我正在尝试编写for循环来大写字符串的每个其他字母。这是我到目前为止所提出的......
var input = "craig";
document.getElementById("para").innerHTML = firstLetterUppercase();
function firstLetterUppercase () {
for (i=0; i < input.length; i+=2) {
input.charAt(i).toUpperCase;
return input;
}
}
<p id="para"> </p>
为什么这不起作用?有什么想法?
答案 0 :(得分:1)
input.charAt()
不会修改字符串,因此您需要将结果分配给某些内容。还有一些其他问题,但这里的东西与你的东西非常相似,但却有效:
function firstLetterUppercase (input) {
for (i=0; i < input.length; i+=2) {
input = input.substr(0, i) + input[i].toUpperCase() + input.substr(i + 1);
}
return input;
}
var test = 'this is a test';
console.log(firstLetterUppercase(test));
这是使用正则表达式的另一个版本:
var test = 'this is a test123';
function firstLetterUppercase() {
return test.replace(/.{2}/g, function(match, $1, $2, offset, original) {
return '' + match[0].toUpperCase() + match[1];
})
}
console.log(firstLetterUppercase(test));
答案 1 :(得分:1)
return
循环中的for
关键字在第一个循环后立即中止。toUpperCase
是一个函数,您必须使用()
在指定的元素上执行它。input.charAt(i).toUpperCase()
将返回新更改的字母,而不会改变原始字母。我建议您拆分字符串或只使用扩展运算符,然后 map 使用Array#map
进行更改只有偶数索引的字母。
var input = "craig",
elem = document.getElementById("para");
function firstLetterUppercase() {
elem.innerHTML = [...input].map((v,i) => i%2 ? v : v.toUpperCase()).join('');
}
firstLetterUppercase();
&#13;
<p id="para"></p>
&#13;
答案 2 :(得分:1)
javascript中的字符串是不可变的。您无法修改原始字符串。您必须创建一个新的:
function firstLetterUppercase (input) {
var res = "";
for (i=0; i < input.length; i++) {
res += i % 2 == 0 ? input.charAt(i).toUpperCase() : input.charAt(i);
}
return res;
}
var test = 'test string';
console.log(firstLetterUppercase(test));
&#13;