使其他所有字母大写

时间:2017-04-03 18:52:51

标签: javascript html

我正在尝试编写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>

为什么这不起作用?有什么想法?

3 个答案:

答案 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()将返回新更改的字母,而不会改变原始字母。
  • 不是将整个函数绑定到DOM元素,而只绑定返回的变量。

我建议您拆分字符串或只使用扩展运算符,然后 map 使用Array#map进行更改只有偶数索引的字母。

&#13;
&#13;
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;
&#13;
&#13;

答案 2 :(得分:1)

javascript中的字符串是不可变的。您无法修改原始字符串。您必须创建一个新的:

&#13;
&#13;
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;
&#13;
&#13;