【发布时间】:2018-12-04 21:43:32
【问题描述】:
我有一个数组,其中包含与此类似的人的姓名(但要大得多):
let names = [
"John Brown",
"Tristan Black",
"Carl Jobbs",
"Aidan Burrows",
"Taylor Joe"
];
基于输入,我试图返回数组中最相关的结果。目前我正在遍历名称数组并像这样检查它们:
if(name.toLowerCase().includes(input.toLowerCase()))
{
console.log("Found match : " + name);
}
这显然不适合查找最相关的搜索结果,因为它会找到任何输入的名称。
理想情况下,我想做的是遍历名称数组并找到前 5 个(从某种意义上说,它们与输入最相似)结果。
我该怎么做?
【问题讨论】:
-
定义
most relevant。就 levenshtein 距离而言,最接近的结果是什么? -
从多少个字符开始?通常你会想在用户输入超过 2 个字符后开始你的
search -
你熟悉Array.filter吗?
-
这可能与您相关:github.com/gf3/Levenshtein Levenshtein 距离提供了一种度量来确定一个字符串与另一个字符串的相似性或“相关性”。您可能会发现根据这些字符串与输入字符串的 Levenshtein 距离对前 5 个字符串进行排序很有用
-
我已经编辑了我的数组,因为我实际上在名称中包含了每个人的姓氏。理想情况下,如果输入是 Aid,例如它只会显示 Aidan Burrows,但如果我搜索 Burr,它只会显示 Aidan Burrows(因为那是他的姓氏)。同样,如果我搜索 Jo,它会同时显示 Carl Jobbs 和 Taylor Joe
标签: javascript arrays search