为什么我的indexOf和for循环无法正常工作?

时间:2019-06-19 16:34:26

标签: javascript for-loop if-statement indexof

我的目标是将每个字母加3,例如,“ a”变成“ d”,“ z”变成“ c”等,并忽略不是字母的字符。我在理解for循环以及随后关于我的变量char的if / else if / else语句时遇到了麻烦。我也不明白为什么我得到lc.indexOf(char) = -1,好像连我的数组都没有。

以下是我尝试过的时间表:

我将字符串转换为数组是因为JS不会在for循环中接受字符串,如str中的char ...它将告诉我它必须是一个对象,所以我使用了.split()函数。 / p>

我用窗口提示检查了我的数组是否正确。

我将变量“增加”更改为2和4,分别得到3个b和d。

我检查了if语句中的indexOf(char),它们返回-1。

看来变量char不会超过初始的if语句...即使var str = ZZ2,我仍然会得到所有小写的答案。

我已经编程了3个星期,所以请不仅帮助我了解如何使用JavaScript进行编程,而且还要了解为什么它不起作用以及为什么正确的方法可以正常工作。

<p id="response"></p>
//I want to advance these characters by 3, ignoring the !
<script>
var str = "2Za";
var lowercase = "abcdefghijklmnopqrstuvwxyz";
var uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var increase = 3;
var answer = "";
var strarr = str.split("");
var lc = lowercase.split("");
var uc = uppercase.split("");
var char;
for (char in strarr) {
    if (char in lc) {
      answer += lc[(lc.indexOf(char) + increase) % 26];
    } else if (char in uppercase) {
      answer += uc[(uc.indexOf(char) + increase) % 26];
    } else {
      answer += char;
    }
  }

document.getElementById("response").innerHTML = answer

</script>

我得到所有小写的“ ccc”或与我相对应的任何字母 变数增加

2 个答案:

答案 0 :(得分:0)

两个问题:

  1. 您正在尝试使用for-in遍历数组。 do one of these things instead不是for-in的目的。

  2. 另一个问题在这里:

    if (char in lc) {
    

    in运算符不检查值是否在数组中,而是检查对象(直接或在其原型链中)是否存在属性。

    相反,获取索引,如果找不到,它将为-1

    index = lc.indexOf(char);
    if (index != -1) {
        answer += lc[(index + increase) % 26];
    //                                    ^^--- I'd probably also use lc.length here
    //                                          rather than a hardcoded value
    }
    

    (当然,uc检查也是如此。)

答案 1 :(得分:0)

只需添加到T.J.的答案中,您可能会发现有用的其他几点

首先,您不需要拆分字符串!您可以使用length,indexOf和其他所有内容将它们视为数组。不需要split(“”)函数。

此外,虽然确实不希望使用“ in”,但确实希望使用“ of”,例如

for (char of str)

在那之后,您确实确实想使用indexOf。以下是显示实际代码的代码段:

var str = "2Za";
var lowercase = "abcdefghijklmnopqrstuvwxyz";
var uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var increase = 3;
var answer = "";
var char;
for (char of str) {
    if (lowercase.indexOf(char) > -1) {
      answer += lowercase[(lowercase.indexOf(char) + increase) % 26];
    } else if (uppercase.indexOf(char) > -1) {
      answer += uppercase[(uppercase.indexOf(char) + increase) % 26];
    } else {
      answer += char;
    }
  }

document.getElementById("response").innerHTML = answer
<p id="response"></p>