gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 15:05:55 25 4
gpt4 key购买 nike

这里有一个基本的刽子手游戏。似乎有效,但我无法让重复的字符猜测正常工作。现在银行里只有两个词,“爆米花”和“苹果”。第一次猜“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>

最佳答案

您当前的代码正在专门寻找第一个匹配的字母。无论怎样,您都需要一个循环来处理重复的字符。

但我建议进行另一种修改:您应该维护迄今为止已尝试过的所有字母(好或错)的列表,而不是跟踪“进度掩码”。

拥有 secretWordprogress 并不能提供足够的信息来检测已经尝试过的错误字母 - 这可能是您最终想要实现的功能。另一方面,您可以在每次需要时使用 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('');

或者:

// regular expression: replace() with custom callback
progress = secretWord.replace(/./g, function(letter) {
return letters.indexOf(letter) == -1 ? '_' : letter;
});

或者:

// regular expression: replace() without callback
progress = secretWord.replace(new RegExp('[^' + letters + ']', 'g'), '_');

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

var secretWord = 'apple',
letters = '';

function play(letter) {
if(letters.indexOf(letter) != -1) {
console.log("You've already tried '" + letter + "' ...");
}
else {
letters += letter;

if(secretWord.indexOf(letter) == -1) {
console.log(letter + ' -> wrong!');
}
else {
var progress = secretWord.replace(new RegExp('[^' + letters + ']', 'g'), '_');

console.log(letter + ' -> ' + progress);

if(progress == secretWord) {
console.log('Well done!');
}
}
}
}

play('i');
play('e');
play('p');
play('e');
play('a');
play('l');

关于javascript - 如何替换字符串中的重复字符 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38951925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com