尝试使用.toUpperCase()将字母转换为大写...不起作用?

时间:2016-03-04 07:17:07

标签: javascript arrays

我尝试使用.toUpperCase()将数组中的字符转换为大写字母,但它不起作用。我很确定我的逻辑是正确的,所以不确定为什么它不起作用?



var test = "hello*3";


function LetterChanges(str) {
  //var testArr = str.split("");
  var tempArr = [];

  for (i = 0; i < str.length; i++) {
    if (str.charCodeAt(i) >= 97 && str.charCodeAt(i) <= 122) {

      tempArr.push(str.charCodeAt(i));
      tempArr[i] = tempArr[i] + 1;
      tempArr[i] = String.fromCharCode(tempArr[i]);

      if (tempArr[i] == "p" || tempArr[i] == "i") {
        tempArr[i].toUpperCase();
        console.log(tempArr[i]); //this will display "i" and "p".. why?
      }

    } else {
      tempArr[i] = str[i];
    }


  }
  console.log(tempArr); //this display [ 'i', 'f', 'm', 'm', 'p', '*', '3' ]

  str = tempArr.join("");
  return str;

}
&#13;
&#13;
&#13;

所以,当我比较&#34; p&#34;和&#34;我&#34;它能够检测到它,但它并没有将它转换为大写。

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:2)

  

的console.log(tempArr [I]); //这将显示&#34; i&#34;和&#34; p&#34; ...为什么?

因为您没有将转换后的值存储回变量

制作

tempArr[i] = tempArr[i].toUpperCase();

答案 1 :(得分:1)

上面的答案是正确的,但我稍微修改了你写的代码, 因为可以在不使用数组的情况下实现。

var test = "hello*3";
LetterChanges(test)

function LetterChanges(str) {
var newStr = ""
 for (i = 0; i < str.length; i++) {
 var ch = str[i];
 if(ch >='A' && ch<='z'){
    ch =  String.fromCharCode(ch.charCodeAt(0) + 1);
   if(ch == 'p' || ch == 'i')
   ch = ch.toUpperCase();
   }
   newStr += ch;
 }

console.log(newStr);
return newStr;
}

这是小提琴:https://jsfiddle.net/fzme18q0/2/