首页 > 解决方案 > 替换数组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>

标签: javascriptarraysfunctionarray-splice

解决方案


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

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

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

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

而且我认为您可以做的最后一件事getPositions是使用positions = [];.

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


推荐阅读