首页 > 解决方案 > 如何只显示一个隐藏的字母(js)

问题描述

我正在尝试编写《上吊人》的游戏,

为此,我隐藏了所选单词的字母,但是一旦用户选择了一个字母,我就会尝试只显示正确的字母而不显示单词的其余部分,帮助.. 例如:******* The用户猜到 A 然后他只会陶醉正确的字母:** A ****

let storeWord = ["house", "dog", "love"];

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

console.log(randomWord);

let asteriskWord = randomWord.replace(/./g, '*');


console.log(asteriskWord);



let userGuess = input.question("type your guess(a single letter): ");



if(/^[a-zA-Z]/.test(userGuess) && userGuess.length == 1) {
checkLetter();

}

else{
    console.log("You need to put one letter");

}
function checkLetter(){
    if (randomWord.includes(userGuess)){
        let revelWord = asteriskWord.replace(/userGuess/g, )
        return true;    }}

标签: javascriptnode.jsreplace

解决方案


不幸的是,该.replace()功能在这种情况下不起作用。例如在这一行:

let revelWord = asteriskWord.replace(/userGuess/g, )

您是说,获取asteriskWord并替换“字母” - (通常是正则表达式)与userGuess. 因为这asteriskWord只是一个带星号的字符串,所以它不起作用。

我们可以做的是创建我们自己的replaceAt函数——它的工作方式与@Anbesa 提到的类似。

创建一个新函数,例如:

function replaceAt(str, index, replacement) {
  return (
    str.substr(0, index) + replacement + str.substr(index + replacement.length)
  );
}

然后你的checkLetter功能可以变成:

function checkLetter() {
  let matchedLetters = randomWord.match(userGuess);
  return replaceAt(asteriskWord, matchedLetters.index, userGuess);
}

推荐阅读