Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何替换字符串中的重复字符-Javascript_Javascript_String - Fatal编程技术网

如何替换字符串中的重复字符-Javascript

如何替换字符串中的重复字符-Javascript,javascript,string,Javascript,String,这里有一个基本的刽子手游戏。看起来很有效,但我无法让重复的角色猜测正常工作。现在银行里只有两个词,“爆米花”和“苹果”。当你第一次猜苹果的“p”时,它会填充第一个p,但不会填充第二个 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Hangman!</title> </head> <body>

这里有一个基本的刽子手游戏。看起来很有效,但我无法让重复的角色猜测正常工作。现在银行里只有两个词,“爆米花”和“苹果”。当你第一次猜苹果的“p”时,它会填充第一个p,但不会填充第二个

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hangman!</title>
</head>
<body>
<h1>Hangman</h1>
<h2>Press a letter to guess.</h2>
<div id="secret"> </div>

<script>
var computerChoices = ['apples', 'popcorn'];
var progress = "";
// This chooses a word from the set randomly.

    var secretWord = computerChoices[Math.floor(Math.random() * computerChoices.length)];
    for (i=0; i < secretWord.length; i++){
        progress += "_";
    }
// When the user presses the key it records the keypress and then sets it to userguess
    document.onkeyup = function(event) {
    var letter = String.fromCharCode(event.keyCode).toLowerCase();


    if (secretWord.indexOf(letter) > -1){
        console.log("Good Guess!");
        index = secretWord.indexOf(letter);
        progress = progress.substr(0, index) + letter + progress.substr(index + 1);

        // Placing the html into the secret ID
        document.querySelector('#secret').innerHTML = progress;

            if ((/([a-zA-Z]).*?\1/).test(secretWord)) {             
                console.log("Yep, there's a duplicate here")
     }}else{
        console.log ("Eeeeeennnnnghh! Wrong! Try again dumbassss!");
    }



}
</script>
</body>
</html>

刽子手!
刽子手
按字母猜。
var computerChoices=['苹果','爆米花'];
var progress=“”;
//这将从集合中随机选择一个单词。
var secretWord=computerChoices[Math.floor(Math.random()*computerChoices.length)];
对于(i=0;i-1){
log(“猜对了!”);
索引=secretWord.indexOf(字母);
进度=进度.substr(0,索引)+字母+进度.substr(索引+1);
//将html放入机密ID中
document.querySelector(“#secret”).innerHTML=progress;
if(/([a-zA-Z]).*1/).test(secretWord)){
log(“是的,这里有一个副本”)
}}否则{
console.log(“eeeeeennnnghh!错误!请重试Dumbasss!”);
}
}
试试看


刽子手!
刽子手
按字母猜。
var computerChoices=['苹果','爆米花'];
var progress=“”;
//这将从集合中随机选择一个单词。
var secretWord=computerChoices[Math.floor(Math.random()*computerChoices.length)];
对于(i=0;i-1){
log(“猜对了!”);
索引=secretWord.indexOf(字母);
进度=进度.substr(0,索引)+字母+进度.substr(索引+1);
secretWord=secretWord.substr(0,索引)+'*'+secretWord.substr(索引+1);
console.log('秘密字为:'+秘密字);
//将html放入机密ID中
document.querySelector(“#secret”).innerHTML=progress;
if(/([a-zA-Z]).*1/).test(secretWord)){
log(“是的,这里有一个副本”)
}}否则{
console.log(“eeeeeennnnghh!错误!请重试Dumbasss!”);
}
}
试试看


刽子手!
刽子手
按字母猜。
var computerChoices=['苹果','爆米花'];
var progress=“”;
//这将从集合中随机选择一个单词。
var secretWord=computerChoices[Math.floor(Math.random()*computerChoices.length)];
对于(i=0;i-1){
log(“猜对了!”);
索引=secretWord.indexOf(字母);
进度=进度.substr(0,索引)+字母+进度.substr(索引+1);
secretWord=secretWord.substr(0,索引)+'*'+secretWord.substr(索引+1);
console.log('秘密字为:'+秘密字);
//将html放入机密ID中
document.querySelector(“#secret”).innerHTML=progress;
if(/([a-zA-Z]).*1/).test(secretWord)){
log(“是的,这里有一个副本”)
}}否则{
console.log(“eeeeeennnnghh!错误!请重试Dumbasss!”);
}
}

必须使用第二个参数在循环中调用indexOf。 例如:

var word = "popcorn";
var result = word.indexOf("p");
console.log(result); // Shows "0"
再次执行此操作,但在第二个参数中给出“result”变量:

var previousResult = 0;
var word = "popcorn";
// Give as second argument the previous result increased by 1
var result = word.indexOf("p", previousResult + 1); 
console.log(result); // Shows "2"
您可以执行while循环逻辑:

var secretWord = "popcorn";
var letter = "p";
var result = -2; // Initialize to (-1 - 1)
while ((result = secretWord.indexOf(letter, result + 1)) > -1) {
    console.log(result); // Shows "0" then "2"
    /* Do stuff */
}

必须使用第二个参数在循环中调用indexOf。 例如:

var word = "popcorn";
var result = word.indexOf("p");
console.log(result); // Shows "0"
再次执行此操作,但在第二个参数中给出“result”变量:

var previousResult = 0;
var word = "popcorn";
// Give as second argument the previous result increased by 1
var result = word.indexOf("p", previousResult + 1); 
console.log(result); // Shows "2"
您可以执行while循环逻辑:

var secretWord = "popcorn";
var letter = "p";
var result = -2; // Initialize to (-1 - 1)
while ((result = secretWord.indexOf(letter, result + 1)) > -1) {
    console.log(result); // Shows "0" then "2"
    /* Do stuff */
}

您当前的代码正在专门查找第一个匹配的字母。以这样或那样的方式,您需要一个循环来处理重复的字符

但我建议进行另一种修改:与其跟踪“进度掩码”,不如保留迄今为止已尝试过的所有字母(好或错)的列表

拥有
secretWord
progress
并不能提供足够的信息来检测已经尝试过的错误字母——这可能是您最终想要实现的功能。另一方面,您可以使用
secretWord
和尝试过的字母列表,在每次需要时快速重建
progress

假设尝试过的字母存储在
letters
字符串中。然后可以使用显式循环计算
进度
,例如:

// classic for loop
for(i = 0, progress = ''; i < secretWord.length; i++) {
  progress += letters.indexOf(secretWord[i]) == -1 ? '_' : secretWord[i]
}
// functional programming
progress = secretWord.split('').map(function(letter) {
  return letters.indexOf(letter) == -1 ? '_' : letter;
}).join('');
或:

或:

下面是一些示例代码,展示了这种方法的游戏逻辑

var secretWord='apple',
字母='';
函数播放(字母){
if(字母索引of(字母)!=-1){
log(“您已经尝试了“+”字母“+”…”);
}
否则{
字母+=字母;
if(secretWord.indexOf(字母)=-1){
console.log(字母+'->错误!');
}
否则{
var progress=secretWord.replace(新的RegExp('[^'+字母+']','g'),''');
console.log(字母+'->'+进度);
if(progress==secretWord){
console.log('weld done!');
}
}
}
}
玩(‘我’);
play('e');
play('p');
play('e');
播放(‘a’);

玩(‘l’)您当前的代码正在专门查找第一个匹配的字母。无论如何,你需要一个循环