gpt4 book ai didi

javascript - Javascript 中字符串匹配+替换的特例

转载 作者:行者123 更新时间:2023-12-03 00:57:52 24 4
gpt4 key购买 nike

我发现了大量讨论数组中字符串的查找/替换方法的帖子,但是它们似乎都依赖于“静态字符串”输入来进行替换

即:

var str = "Mr Blue has a blue house and a blue car";
var res = str.replace(/blue/g, "red");

我需要查找并替换对输入事件的检查

var whichKey = (String.fromCharCode(event.keyCode));

还可以动态查找并替换不同字符串中匹配的字符。

需要明确的是:

我正在制作“刽子手”游戏

用户按“W”(例如)作为“猜测”:

secretPuzzleSolution = ['s', 'o', 'l', 'u', 't', 'i', 'o', 'n']
puzzleUserSees = ['_', '_', '_', '_', '_', '_', '_', '_']

W 不在拼图中,因此他们将失去“尝试”机会如果他们按“S”,代码将检查 SecretPuzzleSolution[] 中的“s”,并将 puzzleUserSees[] 中的所有“_”替换为正确位置的“s”,并返回新的 puzzleUserSees = ['S', ' _ ' ,'_','_','_','_','_','_',]结果。

代码成功找到了secretPuzzleSolution[]中的按键,但到目前为止我还无法找到它

  1. 复制 SecretPuzzleSolution[] 中的位置,以便在正确的位置更改 puzzleUserSees[] 元素

  2. 替换按键的所有实例,而不仅仅是第一个(如果 SecretPuzzleSolution[] 中有两个 's' 元素,请在 puzzleUserSees[] 中的正确位置更改这两个元素

到目前为止,我所得到的,它确实完成了部分工作,但正如你所看到的,它在很多方面都明显被破坏了。有什么想法吗?

这是我正在处理的部分:

document.onkeydown = function(e) {
var whichKey = (String.fromCharCode(event.keyCode));
var keyPress = whichKey.toLocaleLowerCase();
var found = secretPuzzleSolution.find(function(element) {
var isMatch = secretPuzzleSolution.indexOf(element);
if (typeof(element) !== 'undefined') {
puzzleUserSees.splice((isMatch), (isMatch), element);
remainingMystery--;
} else {
guessList.push(keyPress);
triesLeft--;
}
return element === keyPress;
});

if (remainingMystery <= 0) {
document.getElementById('game-display-area').innerHTML = ('YOU WIN!')
};
console.log('These guesses were correct: ' + found);
};

我要补充的最后一件事是,我在学校,所以我确信有一种奇特的方法可以做到这一点或使用 jQuery,但应该有一种仅使用 JS 的简单方法,因为这就是我应该做的到目前为止知道:)

我尝试过的其他东西:

      var test_array = (secretPuzzleSolution.indexOf(keyPress) > -1);
if (test_array === true) {
console.log(keyPress + ' was found in the puzzle');
for (i = 0; i < puzzleUserSees.length; i++) {
if (keyPress === puzzleUserSees[i]) {
puzzleUserSees.splice([i], keyPress)
}
}
} else {
triesLeft--;
guessList.push(keyPress);
console.log(keyPress + ' was NOT found');
}

谢谢!

最佳答案

您犯了一个典型的错误,循环遍历数组来搜索某些内容,并将其视为每个不匹配元素的失败。请参阅Searching array reports "not found" even though it's found

您不应该使用.find(),因为它只返回第一个匹配的位置。您需要使用 .each() 来循环整个数组。它接收元素的数组索引,因此您不需要使用仅返回第一个位置的 .indexOf() ,并且当一个字母可能有多个匹配项时没有用处。

document.onkeydown = function(e) {
var whichKey = (String.fromCharCode(event.keyCode));
var keyPress = whichKey.toLocaleLowerCase();
var found = false;
secretPuzzleSolution.forEach(function(element, index) {
if (element == keyPress) {
found = true;
puzzleUserSees = keyPress;
remainingMystery--;
}
});
if (!found) {
triesLeft--;
}
if (remainingMystery <= 0) {
document.getElementById('game-display-area').innerHTML = ('YOU WIN!')
};
};

关于javascript - Javascript 中字符串匹配+替换的特例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52745960/

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