1
我有一個對象數組,我正在過濾我們這些基於用戶輸入的對象。現在我想要做的是通過最匹配的方式對對象進行排序。使用lodash或類似的庫,如何按最接近的結果對集合進行排序?
_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)排序的「別名」從啓動子的距離從字符串
對於#2和#3您可以使用levenshtein距離.. – 2017-05-26 12:35:09