【发布时间】:2022-01-22 13:49:21
【问题描述】:
我想从数组中随机选取一个元素而不重复,但是发生了错误:Cannot read properties of undefined (reading 'sound')。
这是我的代码:
var words = [
{ word: 'major', sound: 'major.mp3'},
{ word: 'apply', sound: 'apply.mp3'},
{ word: 'blue', sound: 'blue.mp3' },
{ word: 'cat', sound: 'cat.mp3' },
{ word: 'class', sound: 'class.mp3'},
{ word: 'code', sound: 'code.mp3' },
{ word: 'cook', sound: 'cook.mp3' },
{ word: 'daisy', sound: 'daisy.mp3'},
{ word: 'ease', sound: 'ease.mp3' },
{ word: 'idea', sound: 'idea.mp3' }
];
var randomWord = words[Math.floor(Math.random() * words.length - 5)]; // just added - 5 here
var audio = new Audio();
var playBtn = document.getElementById("play-button");
var guessBtn = document.getElementById("guess-button");
var nextBtn = document.getElementById("next-button");
var correct = document.getElementById("correct");
var incorrect = document.getElementById("incorrect");
playBtn.addEventListener("click", function() {
audio.src = randomWord.sound;
audio.play();
var name = words.splice(randomWord,1); // just added
words.push(name); // just added
})
guessBtn.addEventListener("click", function() {
var inputBox = document.getElementById("input-box").value;
if (inputBox == randomWord.word) {
correct.innerHTML = "Correct!"
}
else {
incorrect.innerHTML = "Incorrect"
}
})
nextBtn.addEventListener("click", function() {
location.reload();
})
音频播放流畅,直到我试图让它不再重复。我做错了吗?
【问题讨论】:
-
假设您尝试获取介于 0 和
words的最后一个索引之间的随机数,那么您的操作不正确。查看relevant docs的这一部分。 -
您正在返回一个随机数,然后从中减去 5(这可能是负数)。这是由于运算符优先级。在
words.length -5周围加上括号,当然你知道这只会随机化最多 5 个。
标签: javascript typeerror splice