首页 > 解决方案 > 有没有办法用已经将其转换为下划线来替换不是某个字符的所有字符

问题描述

对,所以我正在用 jQuery 做一个带有 html、CSS 和 JavaScript 的刽子手项目。

我所做的是将字符串转换为这样的下划线

var hidden_word;

hidden_word = aWord.replace(/[a-z]/gi, ' _ ');
$("#word").html(hidden_word);

然后稍后如果单击一个字母,它应该用正确的字母更改相应的下划线。

这就是我用它所做的(它不起作用,因为它只是将它全部转换回来)

if(aWord.includes(guess)){
    for(var q=0; q<aWord.length; q++){
        if (aWord[q] == guess){ indices.push(q+1); counter++; 
            $("#word").html(aWord.replace(/Q/g, ' Q '));
        }
        
        console.log(counter);
    }

我做了一些研究,但实际上找不到任何东西。

关于如何制作它的任何想法,以便它转换字母所在的那个?

标签: javascriptjqueryreplace

解决方案


aWord一个简单的解决方案是将whereaWord等于字符串的字母映射abc到一个对象,例如{a: "_", b: "_", c: "_"},然后您可以遍历该对象每个类型用户键入的内容然后返回其值,在返回之前您可以检查对象是否具有用户键入的字母,然后您可以使用相同的键设置当前值来更新对象的值,这样当您再次返回时,这次 UI 将返回正确的结果,让我们举个例子:

const aWord = "abcdef"; // generated based on your logic
const mappings = {}; // initial empty object

aWord.split('').forEach((_, i) => mappings[aWord[i]] = '_'); // fill in the object with letters as keys and underscores as values by default

const guess = "f"; // coming from user

if (aWord.includes(guess)){ // if word has guessed letter, we update object
    mappings[guess] = guess;
}

// mappings now will be => {a: "_", b: "_", c: "_", d: "_", e: "_", f: "f"}
console.log(mappings);

推荐阅读