Javascript:如何逐字比较句子
我正在创建一个带有自定义选项的打字导师 不是专业人士(不要因为我做错了人,做错了地方而生气),但多亏了stackoverflow.com等有用的论坛和贡献的流量/人,我能够在一两天内解决问题 马上,这里Javascript:如何逐字比较句子,javascript,arrays,compare,sentence,Javascript,Arrays,Compare,Sentence,我正在创建一个带有自定义选项的打字导师 不是专业人士(不要因为我做错了人,做错了地方而生气),但多亏了stackoverflow.com等有用的论坛和贡献的流量/人,我能够在一两天内解决问题 马上,这里 while (i < len+1){ if(boxarray[i] == orgarray[i]){ ++i; actualScore = i - 1; } while(i
while (i < len+1){
if(boxarray[i] == orgarray[i]){
++i;
actualScore = i - 1;
}
while(i
我已经搜索过了,“==”运算符没有用,我不会选择JSON.encode。我在上遇到了类似的解决方案。但在我的情况下,我必须在比较两个句子时循环遍历每个单词。细节很琐碎,如果有人帮我解决上述问题,我不会在同一个项目上抱怨,保证
好吧,如果你能帮我的话,我会加上更多的代码
var paratext = document.getElementById('typethis').innerHTML;
var orgstr = "start typing, in : BtXr the yellow box but. please don't shit." ;
var boxtext = document.getElementById('usit').value;
var endtrim = boxtext;
var actualScore;
var orgarray = listToArray(orgstr," ");
var boxarray = listToArray(boxtext," ");
var len = boxarray.length;
var i = 0;
var actualScore; //note var undefined that's one mistake I was making [edit]
if(orgstr.indexOf(boxtext) !== -1){
while (i < len+1){
if(boxarray[i] == orgarray[i]){
++i;
actualScore = i - 1;
}
}
alert(actualScore);
}
var paratext=document.getElementById('typethis').innerHTML;
var orgstr=“开始在黄色框中键入:BtXr,但请不要拉屎。”;
var-boxtext=document.getElementById('usit').value;
var endtrim=boxtext;
var实际核心;
var orgarray=listToArray(orgstr,“”);
var-boxarray=listToArray(boxtext,“”);
var len=boxarray.length;
var i=0;
var actualScore;//注意var未定义这是我犯的一个错误[edit]
如果(orgstr.indexOf(boxtext)!=-1){
而(i
假设输入是字符串形式的两句话
然后要做的第一件事是创建两个临时字符串,删除所有非单词字符(例如标点符号字符)。通过单词分隔符将句子拆分为字符串数组
然后,您可以指定一个整数变量进行评分。为两个句子创建一个外循环和一个内循环。当单词在句子中匹配时,将变量增加1,从第二个句子中删除单词(将单词替换为非单词字符),然后断开内循环
此外,请使用此运算符进行单词比较:
===
如果我按照你的要求做,像这样的事情怎么样:
var s1='狗睡觉';
var s2=‘狗慢跑’;
变量s1Parts=s1.分割(“”);
var s2Parts=s2.分割(“”);
var得分=0;
对于(var i=0;i而言,您的问题是
if (boxarray[i] = orgarray[i])
single=是赋值运算符。将其替换为
===
作为比较。您不是在比较,而是在分配
if(boxarray[i] = orgarray[i]){
^^^
因此,在每次迭代中都是正确的。修复输入错误以实际执行您想要的检查
if(boxarray[i] === orgarray[i]){
^^^
而你计算分数的方式看起来是错误的。你应该这样做
var score = orgstr.length;
while...
if(boxarray[i] === orgarray[i]){
score--;
}
以下内容将比较每个字符,减少每个不等式的“actualScore”:
var sentence1=“这是原始句子。”,//原始文本
sentence2=“这是原始句子。”,//用户键入的内容
长度=句子1.长度,
actualScore=length,//以满分开始
i=0;
而(i{
string1=“string1”;
string2=“string2在这里”;
变更百分比(第1条、第2条);
}
函数更改百分比(string1、string2){
变量s1Parts=string1.拆分(“”);
var s2Parts=string2.拆分(“”);
var=0;
对于(var i=0;i如何粘贴在此处,这不允许有太多的代码空间?编辑您的问题。欢迎使用堆栈溢出。好的,完成了。是的,他们这样做了,但请记住我们是需要帮助的人。@WikiMalik发布了另一个答案。再试一次。在您的第一个代码中,您编写了if(boxarray[i]==orgarray[i]){
但是在您编写的第二个if(boxarray[i]=orgarray[i]){
我不知道你是否更改了它,但你需要使用==进行比较。我使用了代码,它是word!谢谢你。你已经节省了一天。应该使用==
来代替。将我的答案更改为===。记录在案,它功能齐全,但性能会更好==。我可以找到最简单的解释:“===永远不会比==慢。它们都进行类型检查,因此===与==相比不会做任何额外的事情,但是类型检查可能会允许===在类型不相同时更快退出。”有关更多参考,请参阅此链接。
var score = orgstr.length;
while...
if(boxarray[i] === orgarray[i]){
score--;
}
var sentence1 = "This is the original sentence.", // original text
sentence2 = "This is teh originel sentence.", // what the user typed
length = sentence1.length,
actualScore = length, // start with full points
i = 0;
while(i<length){
if(sentence1[i]!==sentence2[i]){
actualScore--; // subtract 1 from actual score
}
i++; // move to the next index
}
alert("'sentence2' is "+Math.round(100*(actualScore/length))+"% accurate");
{
string1="string1";
string2="string2 is here";
changepercent(string1,string2);
}
function changepercent(string1,string2) {
var s1Parts= string1.split(' ');
var s2Parts= string2.split(' ');
var matched = 0;
for(var i = 0; i<s1Parts.length; i++)
{
for(var j = 0; j<s2Parts.length; j++)
{
if(s1Parts[i] === s2Parts[j])
matched++;
}
}
var percentage=(matched/Math.max(s1Parts.length, s2Parts.length))*100;
console.log(matched);
console.log(percentage);
if(percentage<50)
{
console.log("Change Above 50%");
}
}