Javascript 按查询对字符串数组排序

Javascript 按查询对字符串数组排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个字符串数组,我需要对它进行排序,但是!我有一个用户查询。查询是一个字符串,例如“orange”。我需要对它进行排序,以便在列表顶部显示类似于“橙色”的值 现在,我实现了一个函数,可以按查询的第一个字符对其排序 function comparisonFnction(a, b) { const aeq = a[0].toLowerCase() == query.charAt(0).toLowerCase() const beq = b[0].toLowerCase() ==

我有一个字符串数组,我需要对它进行排序,但是!我有一个用户查询。查询是一个字符串,例如“orange”。我需要对它进行排序,以便在列表顶部显示类似于“橙色”的值

现在,我实现了一个函数,可以按查询的第一个字符对其排序

function comparisonFnction(a, b) {
    const aeq = a[0].toLowerCase() == query.charAt(0).toLowerCase()
    const beq = b[0].toLowerCase() == query.charAt(0).toLowerCase()

    if aeq == beq
        return 0
    elif aeq
        return -1
    else
        return 1
}
strings_array = strings_array.sort(comparisonFnction)
但我想按查询的所有字符对其排序,以便向用户显示最相关的搜索结果


谢谢 下面是一个分数启发式函数的快速示例(它查看两个字符串中的字符顺序)

const fruits=“苹果鳄梨香蕉黑莓蓝莓哈密瓜樱桃葡萄柠檬酸橙芒果油桃梨菠萝李子覆盆子草莓西瓜”拆分(
" ",
);
//清除字符串以进行比较。
//小写该值,然后删除除字母数字以外的所有内容。
函数清除字符串{
返回s.toLowerCase().replace(/[^0-9a-z]+//g,”);
}
//计算项目的搜索相关性得分。
功能评分搜索(搜索,项目){
item=cleanString(item);
搜索=清除字符串(搜索);
分数=0;
设p=0;//在`项中的位置`
//查看搜索字符串的每个字符,在结尾处停止。。。
对于(var i=0;i{
//获取用户输入。。。
常量输入=e.target.value;
//在每个项目上绘制一个得分为“[[“苹果”,3],“香蕉”,2]]”的地图
const itemScores=fruits.map((f)=>[f,scoreSearch(input,f)];
//删除不匹配项
const filteredItemScores=itemScores.filter(([text,score])=>score>0);
//按分数降序排列配对
sort((a,b)=>b[1]-a[1]);
//为输出设置文本格式:
常量输出=filteredItemScores
.map(([text,score])=>`${text}(${score})`)
.加入(“\n”);
//显示输出
document.getElementById(“output”).value=output | |“未找到水果!”;
});


这是一个相当复杂的算法,您不太可能看到以本网站格式发布的答案。可能想看看为这类事情设计的工具,比如下划线或Lodash。你必须想出一个合适的分数/相关性函数——首先,你可以看看用户的查询与字符串共有多少个字符。@Claies没有那么复杂,也不需要Lodash:)看到我的答案了吗