匹配或同步两个数组以在 JavaScript 中制作拼写游戏

Match or synchronize two arrays to make a spelling game in JavaScript

我是编码新手,目前正在学习使用 Javascript 制作拼写游戏。我正在尝试制作一个就像 Youtube 上的 Coding With Kenny's 一样。这是他的代码和我的一些编辑:

<body>
    <h1 id="heading">Spelling App</h1>
    <div id="container">
      <input id="input">
        <div id="buttons">
          <button id="checkButton">Check</button>
          <button id="getWordButton">get word</button>
          <button id="resetButton">next word</button>
        </div>
        <p id="correct"></p>
        <p id="incorrect"></p>
    </div>
    <script>
      var words = ["easy","apple","idea","key","awesome",
                  "spelling","eligible","cat","dog","firefly"];
      var randomWord = words[Math.floor(Math.random()*words.length)];
      var guessbtn = document.getElementById("checkButton");
      var getwordbtn = document.getElementById("getWordButton");
      var resetbtn = document.getElementById("resetButton");

      var correct = document.getElementById("correct");
      var incorrect = document.getElementById("incorrect");

      resetbtn.addEventListener("click", function() {
        location.reload();
      })

      var speech = new SpeechSynthesisUtterance();

      guessbtn.addEventListener("click", function() {
        var input = document.getElementById("input").value;

        if(input==randomWord) {
          correct.innerHTML = "correct!"
        }
        else if (input!==randomWord) {
          incorrect.innerHTML = "incorrect!"
        }
      })

      getwordbtn.addEventListener("click", function() {
        var input = document.getElementById("input").value;
        speech.text = randomWord;
        speechSynthesis.speak(speech);
      })
    </script>
  </body>

问题是我想为 getWordButton 使用外部音频文件而不是 speech.text。我尝试制作 2 个数组:1 个用于音频文件,另一个用于答案,但它不起作用,因为它们在随机选择时无法同步。 这是我尝试添加的数组:

var Sounds= ["easy.mp3","apple.mp3","idea.mp3","key.mp3","awesome.mp3",
                  "spelling.mp3","eligible.mp3","cat.mp3","dog.mp3","firefly.mp3"];
oldSounds = [];
var index = Math.floor(Math.random() * (sounds.length)),
    thisSound = sounds[index];

我希望在点击“获取单词”按钮时播放音频(要拼的单词),另一个数组:

var words = ["easy","apple","idea","key","awesome",
                  "spelling","eligible","cat","dog","firefly"];
      var randomWord = words[Math.floor(Math.random()*words.length)];

作为答案。

有什么建议吗?

因为您是从两个数组中随机选择的。在两个数组中获得相同索引的随机非零机会,但几率非常低。

如果你能保证数组总是相同的长度和相同的顺序,只需选择一个随机值并在两个数组中使用它:

var index = Math.floor(Math.random() * sounds.length);
var randomWord = words[index];
var randomSound = sounds[index];

理想的下一步是完全不使用两个数组,而是使用一个对象数组。例如:

var words = [
  { word: 'easy', sound: 'easy.mp3' },
  { word: 'apple', sound: 'apple.mp3' },
  // etc.
];

然后从该数组中随机选择一个对象:

var randomWord = words[Math.floor(Math.random() * words.length)];

并且您可以使用该对象的 .word.sound 属性。例如比较用户输入时:

if (input == randomWord.word)

因此,与其手动维护多个值数组(它们需要具有相同的长度、相同的顺序等),不如让 一个 个对象数组相关值放在一起。