4

我正在用数据库构建一个刽子手游戏。我的目标是将所有猜测的字母存储在我的字段中,例如“aesdfr”。一根弦,没有什么疯狂的。

然后我将这些字母分成一组猜测的字母。

考虑到这一点,如果我有以下

var word = "frog";
var stored_guesses = "frsd"; // hard coded for now
var guessed_letters = stored_guesses.split("");

然后,我如何浏览猜出的字母并在屏幕上显示他们没有猜到的每个字母的“_”,并为他们猜到的字母显示正确的字母?

我正在考虑遍历 stored_guesses 中的每个字母,并为每个不存在的字母用连字符替换原始单词。但我很困惑。

我敢肯定,我什至会以可能的方式做到这一点。有没有更好的方法来存储猜测的字母并显示编码的单词?

4

2 回答 2

3

您甚至不需要担心数组,您可以通过简单的字符串替换来做到这一点(使用包含您猜测的字母的否定字符类的全局正则表达式):

var word = "Long word incoming";
var guessed = " aongc";

var regexp = new RegExp('[^' + guessed + ']','g');
var display = word.replace(regexp, '_');

console.log(display);

演示:http: //jsbin.com/UxixOdA/1/edit

PS:如果你想在你猜测的字符串中允许特殊符号(除了字母),你可能需要在创建正则表达式时将它们转义,否则你会有惊喜:

// Guesses: a, -, z
var guessed = " a-z"
var regexp = /[^ a-z]/g // matches anything except lowercase letters
于 2013-10-31T14:28:58.123 回答
2

ES5 单线:

word.split("").map( function(l) { return stored_guesses.indexOf(l) !== -1 ? l : "_" } ) .join("")

如果您需要旧版浏览器支持,可以使用标准 for 循环来完成:

var w = word.split("");
var display = "";
for (var i = 0; i< w.length; i++) {
    display += stored_guesses.indexOf(w[i]) !== -1 ? w[i]  : "_";
}
console.log(display);
于 2013-10-31T14:26:57.270 回答