我有一个对象数组,我根据用户输入过滤这些对象。现在我想做的是通过最接近的匹配对对象进行排序。
_internalSearch = (input) => {
const { data } = this.props;
const filteredData = _.filter(data, (collection) => {
const subCollection = _.pick(collection, ["name", "alias"];
return _.includes(
subCollection.toString().toLowerCase(),
input.toString().toLowerCase()
);
});
//psudo code:
/**
return _.sortBy( items-by-closest-matching-search )
*/
}
数据类似于:
[
{
"id": 2,
"name": "Guide",
"url": "http://gify.net",
"alias": "Maps"
},
{
"id": 0,
"name": "Summa",
"alias": "Fun Town"
},
{
"id": 1,
"name": "Mars",
"url": "https://funstuff.org",
"alias": "Dentist"
}
]
现在,如果输入为ma
,则显示所有三个结果,这很好,但我想按名称进行最接近匹配对这些结果进行排序。所以结果将按顺序排列:
Mars, Summa, Guide
我想这个过程将是:
1)按字母顺序排列(可选)
2)根据字符串
的子串距离对“别名”进行排序3)按字符串开头的子串距离
对“名称”进行排序答案 0 :(得分:0)
我能够自己解决这个问题。解决方案非常简单。
我最终关心别名,发现名字排序很多。对别名进行排序增加了我的计算复杂度,在我的用例中,实际上没有任何收益。
sortResults = (data, input) => {
_.sortBy(data, [
({ name }) => {
const index = name.indexOf(input);
return index === -1 ? Number.MAX_SAFE_INTEGER : index;
}
]);
};