首页 > 解决方案 > 检查数组中的字符串无法正常工作

问题描述

我正在尝试使用 For 循环在数组中搜索字符串,并遍历数组的每个点的长度。如果字符串存在,它应该显示该字符串(在这种情况下,一个字母)。出于某种原因,即使该字母存在,输出也不会更新。

例如,说这个词是 DOG。输出数组看起来像“▢ ▢ ▢”。如果我猜到了“D”,它应该将输出数组更新为“D ▢ ▢”。这里的问题是,它没有这样做。

这是我与这部分相关的代码:

function encryptLetters() {

    instructions.style.display = "none";
    
     for (i = 0; i < magicyMagic.length; i++) {
        
        if (magicyMagic.substring(i, i + 1) == " ") {
        
        output[i] = "&nbsp &nbsp";
            
    } else if (magicyMagic.substring(i, i + 1) == ".") {
        
        output[i] = ".";
            
    } else {
        
        output[i] = " ▢&quot;
            
    }

  }


  document.getElementById("mysteryWord").innerHTML = output.join("");

  firstTurn();


}

function player1() {

  console.log("Player 1 is going.");
    nowGoing = 1;
    player1Elements.style.display = "block";
    
    alert(playerName1 + " it is your turn. What do you guess?");
  ask();

}

function ask() {

    console.log("Prompting");
    
    var guess = prompt("What letter would you like to guess?");
    var playerGuess = guess.toUpperCase();
    
    console.log(playerName1 + " guessed " + playerGuess);
    
    checkGuessType(playerGuess);

}

function checkGuessType(playerGuess) {

    console.log("Checking type...");

  if (playerGuess.length > 1) {

    console.log(playerName1 + " guessed a word.");

  } else if (playerGuess == "A" || playerGuess == "E" || playerGuess == "I" || playerGuess == "O" || playerGuess == "U") {

    console.log(playerName1 + " guessed a vowel.");

  } else {

    console.log(playerName1 + " guessed a consonant.");

  }
    
    checkForGuess(playerGuess);

}

function checkForGuess(playerGuess) {

    console.log("Checking if letter is present...");

    for (x = 0; x < magicyMagic.length; x++) {
    
    if (playerGuess == magicyMagic.charAt(x)) {
        
            console.log("Ding ding ding!");
            
      lettersMatched = lettersMatched + 1;
      isCorrect = true;
      output[x] = playerGuess;
      lettersMatched = 0;

    }

  }

  if (isCorrect == false && playerGuess !== "") {
    
        console.log("Player did not guess correctly...");

    document.getElementById("pl1Messages").innerHTML = "There are no " + playerGuess + "'s in the word.";
    lettersMatched = 0;
    document.getElementById("lastMessage").innerHTML = "Player 2 (" + playerName2 + ") will now go.";

  }
    
    hasBeenGuessed.push(playerGuess);
    console.log(hasBeenGuessed[0] + " has been added to the list. Players cannot guess this letter again.");


}

在控制台中,我只看到以下内容:

"The first player's name is Test1."
"The second player's name is Test2."
"The player(s) have been informed."
"The word is UGANDA"
"Player 1 is going."
"Prompting"
"Test1 guessed A"
"Checking type..."
"Test1 guessed a vowel."
"Checking if letter is present..."
"Ding ding ding!"
"Ding ding ding!"
"A has been added to the list. Players cannot guess this letter again."

尽管与该部分相关的 console.log() 语句出现在控制台中,但输出数组没有任何更新。我将如何解决这个问题?

PS 代码片段中没有看到的任何变量很可能是全局变量,我不确定这是否会改变任何东西。

编辑:这是所有相关变量 - 所有数组值都大写,但它仍然不起作用。

var playerName1;
var playerName2;
var nowGoing = 0;
var magicyMagic;
var isCorrect = false;

// ____ Trees (types of trees - 1)
var array1Trees = ["OAK", "ELM", "PINE", "BIRCH", "SPRUCE", "ASPEN", "MAPLE", "CEDAR", "REDWOOD", "CHERRY"];
// ____ (drinks - 2)
var array2Drinks = ["COKE", "FANTA", "SPRITE", "DR. PEPPER", "CRUSH", "WATER", "PEPSI", "LEMONADE", "MILK", "MOUNTAIN DEW"];
// ____ Man (superheroes - 3)
var array3Heroes = ["SPIDERMAN", "AQUAMAN", "BATMAN", "IRONMAN", "SUPERMAN", "ANTMAN", "HEMAN"];
// ____ (games - 4)
var array4Games = ["POKEMON", "MINECRAFT", "TETRIS", "VALORANT", "CALL OF DUTY", "ROBLOX", "SUPER SMASH BROS", "ANIMAL CROSSING", "TERRARIA", "ANGRY BIRDS"];
// ____ (places - 5)
var array5Places = ["CANADA", "NEW YORK", "TEXAS", "GUATEMALA", "PUERTO RICO", "JAMAICA", "THAILAND", "RUSSIA", "HOFFMAN ESTATES", "UGANDA"];
var output = [];
var lettersMatched = 0;
var hasBeenGuessed = [];

标签: javascriptarraysfor-loop

解决方案


字符串比较区分大小写。这意味着字母“e”与字母“E”不同。在您的代码中,您说被猜测的字母是元音,如果它等于“a”、“e”、“i”、“o”、“u”,但您没有检查“A”、“ E”、“I”、“O”、“U”。

因此,当输入为“E”时,您会得到“测试 1 猜到了一个辅音”。

如果您希望比较区分大小写,则应在支票中添加大写字母。如果您不关心区分大小写,可以在比较之前将函数toLowerCase()应用于变量 playerGuess。


推荐阅读