Coderbyte Letter更改挑战 - 其他声明错误

时间:2016-05-02 05:48:54

标签: javascript string if-statement for-loop

我在coderbyte中做了Letter Changing挑战,但我很困惑为什么我的代码不起作用。

  

使用函数LetterChanges(str)取str参数   使用以下算法传递并修改它。

     

将字符串中的每个字母替换为后面的字母   字母表(即c变为d,z变为a)。

     

然后将这个新字符串中的每个元音大写(a,e,i,o,u)和   最后返回这个修改后的字符串。

在最后一个else语句中,我想添加任何不是“newWord”字母的字符。当我通过单词“hello 3”我应该得到“ifmmp 3”,而不是我得到“hhhhhhhihhhhhhhhhhhhhhhhhhheeeefeeeeeeeeeeeeeeeeeeeeeelllllllllllmllllllllllllllllllllllllllmllllllllllllllloooooooooooooopoooooooooooo 333333333333333333333333333undefined .....”如果我采取else语句的时候,我只是得到“ifmmp”没有遇到麻烦3.林理解为什么/如何使用else语句弄乱它以及如何解决这个问题? 我是编码的新手,所以任何帮助都会很棒。

    function LetterChanges(str) { 
var newWord = "";
 var alphabet = "abcdefghijklmnopqrstuvwxyz";
  for(var i = 0; i <= str.length; i++){
            if( str[i] === "z"){
        newWord += alphabet.charAt(0);
      } else if(str[i] === " "){
        newWord +=" ";
      } 

    for (var j = 0; j <= alphabet.length; j++){
        if(str[i] == alphabet.charAt(j)){
                newWord += alphabet.charAt(j+1);
            }
   // this one -------------------> else {
                                    newWord = newWord + str[i]; 
                                   } 
        }

      }
      return newWord;       
    }

1 个答案:

答案 0 :(得分:0)

试试这个:

function LetterChanges(str) { 
    var newWord = "";
    var alphabet = "abcdefghijklmnopqrstuvwxyz";
    for(var i = 0; i < str.length; i++){

        for (var j = 0; j < alphabet.length; j++){

            if(str[i] === alphabet.charAt(j)){
                if( str[i] === "z"){
                    newWord += alphabet.charAt(0);
                } 
                else {
                    newWord += alphabet.charAt(j+1);
                }
            }
            else if (alphabet.indexOf(str[i]) === -1){
               newWord += str[i];
               break;
            }
        }
    }
    return newWord;       
}

以下是更有效的解决方案

function LetterChanges(str) { 
    var newWord = "";
    var alphabet = "abcdefghijklmnopqrstuvwxyz";
    for(var i = 0; i < str.length; i++){
        // if it's a 'z' do not loop through alphabet string and jump straight to the next character.
        if( str[i] === "z"){
            newWord += alphabet.charAt(0);
            continue;
        } 
        for (var j = 0; j < alphabet.length; j++){
            // if they match perform replacement 
            if(str[i] === alphabet.charAt(j)){
                newWord += alphabet.charAt(j+1);
                break;
            }
            // if the current char is not contained on the alphabet string (spaces, numbers and so on...) ---> copy it as it is
            else if (alphabet.indexOf(str[i]) === -1){
               newWord += str[i];
               break;
            }
            // if the current char is contained in the alphabet string but does not match ---> do nothing
        }
    }
    return newWord;
}