Javascript 如何检查单词是否由不同数组中的字母组成
我正在用Vue写一个文字游戏 您从一个随机字符字符串开始,您必须输入一个可以由该字符串生成的单词,例如,对于“ABEOHSTD”,用户可以输入“BASE”以获得4分 我在一个.txt文件中有一个外部单词列表(我也不能使用它,但这是一个单独的问题),我需要根据它来验证单词,但是我在验证单词是否可以从给定的随机字符串中生成时遇到了麻烦 我不知道如何确保每个字母只能在数组中出现的次数内使用,甚至存储分数,但我只想让第一部分正常工作 我尝试将输入的单词和随机字符串拆分为每个字符的数组,循环遍历数组并检查用户输入字符串中的每个字符是否包含在随机字符串数组中Javascript 如何检查单词是否由不同数组中的字母组成,javascript,arrays,vue.js,Javascript,Arrays,Vue.js,我正在用Vue写一个文字游戏 您从一个随机字符字符串开始,您必须输入一个可以由该字符串生成的单词,例如,对于“ABEOHSTD”,用户可以输入“BASE”以获得4分 我在一个.txt文件中有一个外部单词列表(我也不能使用它,但这是一个单独的问题),我需要根据它来验证单词,但是我在验证单词是否可以从给定的随机字符串中生成时遇到了麻烦 我不知道如何确保每个字母只能在数组中出现的次数内使用,甚至存储分数,但我只想让第一部分正常工作 我尝试将输入的单词和随机字符串拆分为每个字符的数组,循环遍历数组并检查
splitUserCurrentWord = this.userAttemptedWord.split("");
for (var i = 0; i <= splitUserCurrentWord.length; i++) {
if (this.randomStringForGame.split("").includes(splitUserCurrentWord[i])) {
return true;
//i++
}
else {
return false;
}
}
}
splitUserCurrentWord=this.userAttemptedWord.split(“”);
对于(var i=0;i您的return
语句在第一次迭代后退出循环
一种方法是使用Array.each
验证所有字母和字符串。includes
检查字母是否是已接受字符串的一部分
const randomString=“ABEOHSTD”;
log(isWordValid(randomString,“BASE”);
log(isWordValid(randomString,“BASEU”);
函数isWordValid(Validleters、attemtedWord){
常量attemptedWordSplitted=attemtedWord.split(“”);
返回attemptedWordSplitted.every(attemptedLetter=>validLetters.includes(attemptedLetter));
}
你的方法是正确的,你需要检查用户词中的每个字母,并检查它们是否在随机词中。如果随机词中有一个字母,你可以将其从随机词中删除,这样它就不能被使用两次:
let randomWord=“ABEOHSTD”;
让userWordThatFail=“BAASE”;
让userWord=“BASE”;
//可选,大写两个单词。
//我们把它分成几个字母,以便更容易处理
让randomLetters=randomWord.split(“”);
让userLetters=userWord.split(“”);
分数=0;
//我们解析用户输入的每个字母
userLetters.forEach((字母)=>{
//这个字母存在于随机词中。
让indexOf当前字母=随机字母。indexOf(字母);
//该字母存在,我们将其删除并增加分数。
如果(当前字母的索引!=-1){
随机字母。拼接(当前字母的索引,1);
分数++;
}
});
//用户输入包含随机输入中不包含的字母。
如果(分数 }
一种简单的方法可能是为要测试的字符串中遇到的每个字符迭代有效字符的列表。使用将落在这个括号内。问题是,对于每个比较来说,这是时间复杂度为0(n_validchars*n_testchars)
这对于较长的字符串可能不可取
JavaScript对象可以在这里提供帮助
使用此高阶函数(它严重依赖于字符串的性质),可以为一组有效字符生成可重用函数:
功能测试(validChars){
常量字符集=新集合(有效字符集);
返回testString=>
Array.prototype.every.call(testString,c=>charSet.has(c));
}
//使用它:
const testForABC=testFor(“ABC”);//返回一个函数
log(testForABC(“AABBCC”);//true
log(testForABC(“abc”));//false
返回将在第一次运行时退出for循环。返回true需要在for循环之外。您可以尽快返回false,如果整个过程运行正常,则假定为true。这对我来说很有效,但我在控制台记录函数的布尔返回时遇到问题。更新的jsfiddle:第40行和第61行不控制台记录任何内容,因此我无法理解第16行的条件为什么不起作用在这两种情况下,您都是在执行console.log
之前返回的。啊,好吧,听起来我根本不理解return和/或console.log()是如何返回的如果成功了,我将不得不进行更多的研究it@DipoOgunmodede基本上,return指令是函数将要执行的最后一条指令。在这之后,你不能什么都没有。请注意,在同一个函数中可以有多个返回。我现在将其更改为:我注意到我无法控制我的wordHasValidCharacters(),但我可以在console.log中记录返回true或false的实际函数,该函数在第48行为isWordValid