替换数组中多个索引处的内容 Javascript

Replace content at multiple indexes in an array Javascript

我正在尝试用 Javascript 制作 Hangman 游戏,用户可以在其中输入一个词让另一个人猜。这个词被发送到一个函数 (makeUnderlines) 并被制成一个下划线数组并返回给玩家,并提示玩家输入他们想猜的字母。字母和单词被发送到一个函数,该函数找到单词中字母的位置 (getPosition) 并将这些位置发送到另一个函数。函数 (insertLetters) 应该用给定位置的字母替换下划线。除了函数不替换数组中的任何内容外,所有这些都有效。如果它只在单词中出现一次,它只会替换第一个字母。解决此问题的任何建议将不胜感激。我也想知道是否有办法防止用户输入单词或猜测的数字。

<!DOCTYPE HTML>

<HTML>
  <HEAD>
    <META CHARSET="UTF-8">
    <TITLE>Hangman</TITLE>
  </HEAD>
  <BODY>
    <SCRIPT TYPE="text/javascript">

      function makeUnderlines(word) {
        for(i = 0; i < word.length; i++){
          underlines.push("\"_\""); 
        }
        return underlines;
      }

      function getPositions(word, letter) {
        for(var i=0; i< word.length;i++) {
        if (word[i] === letter) positions.push(i);
        }
        insertLetters(underlines, positions, letter)
      }

      function insertLetters(underlines, positions, bokstav){
        underlines[positions] = letter;
        return underlines;
      }

      let word = prompt("Choose a word for the player!");
      underlines = [];
      positions = [];
      makeUnderlines(word);
      
      for(i = 7; i > 0; i--){
        letter = prompt("["+underlines+"]\n Guess a letter. You have " + i + " guesses left");
        getPositions(word, letter);
      }

    </SCRIPT>
  </BODY>
</HTML>

开始深入研究的一种方法是使用调试器跟踪应用程序的流程。 Chrome Dev Tools 有一个调试器,可让您逐行查看变量的当前值。

      function insertLetters(underlines, positions, bokstav){
        underlines[positions] = letter;
        return underlines;
      }

insertLetters来看,positions应该是一个整数索引值的数组,但它被直接用作整数。也许尝试遍历 positions 中的值并使用它们来索引 underlines.

      function insertLetters(underlines, positions, letter){
        for (let i = 0; i < positions.length; i++) {
          const pos = positions[i];
          underlines[pos] = letter;
        }
      }

而且我认为您在 getPositions 中可以做的最后一件事是使用 positions = []; 清除位置数组。

总体而言,您的代码看起来非常实用。注意尝试将变量直接传递给函数,而不是依赖全局变量。