Javascript 按单词相关性将数组与另一个数组中的字符串匹配

Javascript 按单词相关性将数组与另一个数组中的字符串匹配,javascript,jquery,Javascript,Jquery,var myArray=[ [“早上好”、“上午好”、“早上好”], [“晚安”、“晚安”、“晚上”], [“好日子”,“好日子”,“好日子”] ]; 函数比较(条目、字符串){ 对于(条目中的var x){ strings=string.split(“”); array1=条目[x][0]。拆分(“”); if(strings.every(s=>array1.indexOf(s)!=-1)){ 项目=条目[x]。切片(1); 退货项目 }否则{ //返回“未找到” } } } $(“#输入”)

var myArray=[
[“早上好”、“上午好”、“早上好”],
[“晚安”、“晚安”、“晚上”],
[“好日子”,“好日子”,“好日子”]
];
函数比较(条目、字符串){
对于(条目中的var x){
strings=string.split(“”);
array1=条目[x][0]。拆分(“”);
if(strings.every(s=>array1.indexOf(s)!=-1)){
项目=条目[x]。切片(1);
退货项目
}否则{
//返回“未找到”
}
}
}
$(“#输入”).keydown(函数(e){
关键字=$(this.val();
如果(e.which==13){
$(此).val(“”);
text=关键字.toLowerCase();
结果=“”+比较(myArray,text)+”
$(“#结果”)。追加(结果);
}
});

返回一些表示“未找到”的值,并在将文本追加到div之前签入keydown()函数

var myArray = [
    ["good morning", "am", "morning"],
    ["good night", "night", "evening"],
    ["good day", "day is good", "it's a good day"]
];

function compare(entry, string) {
    for (var x in entry) {
        strings = string.split(' ');
        array1 = entry[x][0].split(' ');
        if (strings.every(s => array1.indexOf(s) !== -1)) {
            items = entry[x].slice(1);
            return items
        } else {
            return -1;
        }
    }
}
$("#input").keydown(function(e) {
    keyword = $(this).val();
    if (e.which === 13) {
        $(this).val("");
        text = keyword.toLowerCase();
        var matched = compare(myArray, text);
        if(matched!=-1){
          result = '<div>' + matched + '</div>'
        } else {
          result = '<div>Not Found</div>'
        }
       
        $('#results').append(result);
    }
});
var myArray=[
[“早上好”、“上午好”、“早上好”],
[“晚安”、“晚安”、“晚上”],
[“好日子”,“好日子”,“好日子”]
];
函数比较(条目、字符串){
对于(条目中的var x){
strings=string.split(“”);
array1=条目[x][0]。拆分(“”);
if(strings.every(s=>array1.indexOf(s)!=-1)){
项目=条目[x]。切片(1);
退货项目
}否则{
返回-1;
}
}
}
$(“#输入”).keydown(函数(e){
关键字=$(this.val();
如果(e.which==13){
$(此).val(“”);
text=关键字.toLowerCase();
var matched=比较(myArray,文本);
如果(匹配!=-1){
结果=“”+匹配+“”
}否则{
结果='未找到'
}
$(“#结果”)。追加(结果);
}
});
使用
.map()
两次,查看字符串是否包含在内部数组值中,然后展平数组并过滤掉非字符串值

此代码在每个字符串中查找匹配的单词。三元组要么返回字符串(如果找到),要么返回
null
(如果找不到)。这就给出了一个数组。所以它们被展平成一个阵列。最后,过滤掉
null

以下是实现目标的一种方法:

var myArray=[
[“早上好”、“上午好”、“早上好”],
[“晚安”、“晚安”、“晚上”],
[“好日子”,“好日子”,“好日子”]
];
函数比较(条目、字符串){
放线
.拆分(“”)
.map(str=>
entry.map(e=>
e、 映射(f=>(f.includes(str))?f:null)
.flat()
.filter(a=>a!==null));
返回。加入(',');
}
比较(myArray,“晚安,伙计”);
$(“#输入”).keydown(函数(e){
关键字=$(this.val();
如果(e.which==13){
$(此).val(“”);
text=关键字.toLowerCase();
结果=“”+比较(myArray,text)+”
$(“#结果”)。追加(结果);
}
});


您是否考虑过
String.prototype.包含
而不是解析单个单词
如果关键字不在数组中,它将返回未定义的值。
在这种情况下,默认的返回值应该是什么?如果至少找到一个单词,它仍然会返回true。看起来不错,但没有解决问题#1,例如>>“good night dude”。啊-请参阅我的编辑。这将查找与数组字符串中的任何单数项匹配的任何单数搜索项,并返回整个匹配字符串。我们可以在顶部返回最相关的结果吗?原始代码就是这样做的。我意识到在你的头脑中,你的需求是非常清楚的。但是,你的问题(对我来说)不够清楚。例如,对于“最相关的结果”没有定义。搜索字符串应该是什么,例如“伙计,今晚是个好夜晚,我等不及早上好了”
我还忘了提到>>我使用了
.slice(1)
,所以它不会返回每组的第一项。