Javascript 函数不断返回 null
所以我一直在做一个游戏项目,如果玩家点击一个字母,并且该字母与短语相匹配,则它会显示该字母。如果玩家点击一个没有任何匹配项的字母(由 null 表示),则蓝色心形将变成丢失的心形,并且未命中计数器会增加。出于某种原因,即使玩家点击匹配的字母,我的代码仍然会显示丢失的心形。有人可以帮忙吗?这是整个项目的 github 链接: https://github.com/santanaquan/Techdegree-Project-6
这是 javascript 代码片段。
function checkLetter(button) {
const getLetter = document.getElementsByClassName('letter');
let letter;
for (let i = 0; i < getLetter.length; i++) {
if (button.textContent === getLetter[i].textContent) {
getLetter[i].className += ' show';
letter = getLetter[i].textContent;
}
else {
letter = null;
}
}
return letter;
}
由于您的代码会遍历
所有
字母,即使玩家猜对了字母,您的代码也会找到它,但之后会继续循环,这会使
letter
为空。
您只需删除 else 并将
letter
初始化为空。您
不应
在 if 中中断,因为那样您会错过重复的字母。
function checkLetter(button) {
const getLetter = document.getElementsByClassName('letter');
let letter = null;
for (let i = 0; i < getLetter.length; i++) {
if (button.textContent === getLetter[i].textContent) {
getLetter[i].className += ' show';
letter = getLetter[i].textContent;
}
}
return letter;
}
checkLetter
函数存在错误。我引用以下原文以供参考:
function checkLetter(button) {
const getLetter = document.getElementsByClassName('letter');
let letter;
for (let i = 0; i < getLetter.length; i++) {
if (button.textContent === getLetter[i].textContent) {
getLetter[i].className += ' show';
letter = getLetter[i].textContent;
}
else {
letter = null;
}
}
return letter;
}
这里的问题是
letter
每次循环都会更新。这意味着它以最后一次迭代获得的值结束,除非单击了最后一个字母,否则该值将始终为
null
- 丢弃在途中找到的任何匹配项。
一个非常简单的修复方法是将
letter
初始化为
null
,然后仅在找到匹配项时更改它。这保证它在最后会有正确的值。所以这是一个有效的版本:
function checkLetter(button) {
const getLetter = document.getElementsByClassName('letter');
let letter = null;
for (let i = 0; i < getLetter.length; i++) {
if (button.textContent === getLetter[i].textContent) {
getLetter[i].className += ' show';
letter = getLetter[i].textContent;
}
}
return letter;
}
正如其他人指出的那样,您的 checkLetter 函数已损坏。您必须在获得匹配后停止。如果进一步迭代,字母将不匹配,并且 letter 变量将设置为 null。将其修改为此。
function checkLetter(button) {
const getLetter = document.getElementsByClassName('letter');
let letter = null;
for (let i = 0; i < getLetter.length; i++) {
if (button.textContent === getLetter[i].textContent) {
getLetter[i].className += ' show';
letter = getLetter[i].textContent;
break;
}
}
return letter;
}
现在您还有另一个问题,即如果字母已经被正确猜出,则如果短语中有重复的字符,则循环将不起作用,因为第一个匹配将设置 letter 变量。因此,您必须在循环中添加检查以查看字母是否已匹配。
function checkLetter(button) {
const getLetter = document.getElementsByClassName('letter');
let letter = null;
for (let i = 0; i < getLetter.length; i++) {
if (button.textContent === getLetter[i].textContent) {
if(/*letter is not already guessed*/) {
getLetter[i].className += ' show';
letter = getLetter[i].textContent;
}
}
}
return letter;
}