替换数组中多个索引处的内容 Javascript
Replace content at multiple indexes in an array 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>
开始深入研究的一种方法是使用调试器跟踪应用程序的流程。 Chrome Dev Tools 有一个调试器,可让您逐行查看变量的当前值。
function insertLetters(underlines, positions, bokstav){
underlines[positions] = letter;
return underlines;
}
从insertLetters
来看,positions
应该是一个整数索引值的数组,但它被直接用作整数。也许尝试遍历 positions
中的值并使用它们来索引 underlines
.
function insertLetters(underlines, positions, letter){
for (let i = 0; i < positions.length; i++) {
const pos = positions[i];
underlines[pos] = letter;
}
}
而且我认为您在 getPositions
中可以做的最后一件事是使用 positions = [];
清除位置数组。
总体而言,您的代码看起来非常实用。注意尝试将变量直接传递给函数,而不是依赖全局变量。
我正在尝试用 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>
开始深入研究的一种方法是使用调试器跟踪应用程序的流程。 Chrome Dev Tools 有一个调试器,可让您逐行查看变量的当前值。
function insertLetters(underlines, positions, bokstav){
underlines[positions] = letter;
return underlines;
}
从insertLetters
来看,positions
应该是一个整数索引值的数组,但它被直接用作整数。也许尝试遍历 positions
中的值并使用它们来索引 underlines
.
function insertLetters(underlines, positions, letter){
for (let i = 0; i < positions.length; i++) {
const pos = positions[i];
underlines[pos] = letter;
}
}
而且我认为您在 getPositions
中可以做的最后一件事是使用 positions = [];
清除位置数组。
总体而言,您的代码看起来非常实用。注意尝试将变量直接传递给函数,而不是依赖全局变量。