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



我是编码新手,目前正在学习用Javascript制作拼写游戏。我正在努力制作一个像Youtube上的《与肯尼一起编码》一样的节目。这是他的代码和我的一些编辑:

<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>

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

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)

因此,您不必手动维护多个值数组(这些数组需要具有相同的长度、相同的顺序等(,只需拥有一个对象数组,其中将相关值保持在一起。