Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我需要比较两个字符串(或数组),并返回它们的相似性百分比,而不管它们的顺序如何_Javascript_Arrays_String - Fatal编程技术网

Javascript 我需要比较两个字符串(或数组),并返回它们的相似性百分比,而不管它们的顺序如何

Javascript 我需要比较两个字符串(或数组),并返回它们的相似性百分比,而不管它们的顺序如何,javascript,arrays,string,Javascript,Arrays,String,我目前正在尝试制作一个模块,您可以在此模块上学习古代语言的词汇,为此,我需要一个工具来检查用户的答案是否与数据库中的答案匹配 我想要实现这一点的方法(如果您有更有效的解决方案,请让我知道)是计算字符(它们都是小写字符串或没有标点的数组)并检查它们的相似性百分比 有没有办法做到这一点 我试着做点什么,但不幸的是结果不太好 // these are the variables let p = 'The lazy dog jumps over the quick brown fox. It bark

我目前正在尝试制作一个模块,您可以在此模块上学习古代语言的词汇,为此,我需要一个工具来检查用户的答案是否与数据库中的答案匹配

我想要实现这一点的方法(如果您有更有效的解决方案,请让我知道)是计算字符(它们都是小写字符串或没有标点的数组)并检查它们的相似性百分比

有没有办法做到这一点

我试着做点什么,但不幸的是结果不太好

// these are the variables

let p = 'The lazy dog jumps over the quick brown fox. It barked.';
p = p.toLowerCase();
p = p.replace(/\s/g, '');
p = p.replace('.', '');
p = p.replace('.', '');

let a = 'The quick brown fox jumps over the lazy dog. It barked.';
a = a.toLowerCase();
a = a.replace(/\s/g, '');
a = a.replace('.', '');
a = a.replace('.', '');

let c = 'The quick black ostrich jumps over the lazy dog. It barked.';
c = c.toLowerCase();
c = c.replace(/\s/g, '');
c = c.replace('.', '');
c = c.replace('.', '');

// this is what should happen: 

compare(p,a); // should return 100%
compare(p,c); // should return 72% (if my math is correct)

您可以对相同的字符进行计数,第一个字符的计数是递增的,第二个字符的计数是递减的

然后返回相似性

功能比较(a、b){
变量计数={},增量;
a=清洁(a);
b=清洁(b);
getCount(a,count,1);
getCount(b,count,-1);
delta=Object.values(count).reduce((s,v)=>s+Math.abs(v),0);
返回(b.长度-增量)/a.长度;
}
函数getCount(字符串,count={},inc=1){
数组.from(string).forEach(c=>count[c]=(count[c]|0)+inc);
返回计数;
}
常数
clean=s=>s.toLowerCase().replace(/[\s,]+/g');
var p='懒惰的狗跳过敏捷的棕色狐狸。它叫了起来,
敏捷的棕色狐狸跳过了懒狗。它叫了起来,
c=”敏捷的黑鸵鸟跳过了懒狗。它叫了起来;
log(比较(p,a));
log(比较(p,c))