使用for循环

时间:2015-05-14 12:59:16

标签: javascript arrays for-loop

我正在通过使用for循环移动每个字母(“a”变为“b”,“z”变为“a”)来更改字符串,但每次函数循环时,它都不会存储新字符串值。当ABC应该得到“BCD”时,我得到循环“BBC,ACD,ABD”的功能

我是编码的新手,我很肯定有一个更简单的方法来做到这一点(在coderbyte挑战中它被归类为容易)但是我想尝试以这种方式解决它,因为它是我来的那个用。

提示>解答。我坚持这个的时间越长,我就越坚定地让这个代码工作哈哈,特别是因为我感觉如此接近!

function moveLetter(str) {
  var index = ["a","b","c"..."z", "a"] //sorry didn't want to type out the whole alphabet and my code just crashed
  var alpha = "zabcdefghijklmnopqrstuvwxyz"
  var new = ""
  
  for (c=0; c<=str.length-1; c++) {
    if (str.charAt(c) == " ")
      str.charAt(c) == " "; //I did this to circumvent the "undefined" error I would get when the loop hits a space
    
    else
      str = str.replace(str.charAt(c), index[alpha.search(str.charAt(c)))];

}

return str
}

是的,这是一个丑陋的科学家代码,可以做一些相对简单的事情。

我的想法是让循环遍历给定字符串的每个字符,并根据我制作的索引数组替换它。

核心问题(除了我为什么这样做)是“如何让变量在第一个循环之后保持变化,所以它看起来像这样:

ABC - &gt; BBC - &gt; BCC - &gt; BCD

感谢大家的帮助

2 个答案:

答案 0 :(得分:0)

&#13;
&#13;
var str = 'string';  // Call toLowerCase if needed

var length = str.length;

var START_CHAR_CODE = 97;
var END_CHAR_CODE = 122;

var output = [];

for (var i = 0; i < length; i++) {

  var code = str.charCodeAt(i);
  
  if (code === END_CHAR_CODE) {
    code = START_CHAR_CODE;
  } else {
    code++;
  }
  
  output.push(String.fromCharCode(code));

}

alert(output.join(''));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

始终保持简单简单!根据您的代码:您需要带字母表的字符串数组 不必要。在

var alpha = "abcdefghijklmnopqrstuvwxyz"

每个字母都是小写字母。要比较字符串,请先将其设置为小写

var str = str.toLowerCase()

接下来,检查最后一个字母“z”。这应该是“a”

if(str[i] == "z") {
    result += "a"; 
}

使用字符串方法搜索,我们得到字符串中匹配值的索引。在这里,我们需要索引

alpha.search(str[i]) + 1

从这个索引,我们想要这封信:

alpha.charAt(alpha.search(str[i]) + 1)

达成:

function moveLetter(str) {
    var str = str.toLowerCase(); // every character to lower case 
    var alpha = "abcdefghijklmnopqrstuvwxyz";
    var result = "";
    for(var i = 0; i < str.length; i += 1) {
        if(str[i] == "z") {
            result += "a";
        } else {
            result += alpha.charAt(alpha.search(str[i]) + 1);
        }
    }
    return result.toUpperCase(); // upper case
    // return result;
}

Demo