Вам нужны какие-то логики c, чтобы решить, что ближе всего, ..
Один простой пример может быть основан на длине, поэтому длина результата и длина поискового термина близки, эти go наверх. Вы могли бы сделать более изящную оценку, чем эта, но вам нужно будет решить, к какой логике c это относится. например. Существует даже то, что называется алгоритмом soundex, вы можете объединиться с этим et c. https://en.wikipedia.org/wiki/Soundex
Но используя простой тест длины в качестве руководства, ниже приведен простой пример. Он также возвращается к простому сравнению строк, если баллы каждого элемента равны.
var items = [
{
"id": 1,
"code": "SFHR001",
"property": "8''",
"description": "Half Round",
"productGroup": {
"id": 2,
"name": "Steel Files",
}
},
{
"id": 2,
"code": "MR004",
"property": "7''",
"description": "Polished",
"productGroup": {
"id": 3,
"name": "Pliers",
}
},
{
"id": 2,
"code": "HR001",
"property": "7''",
"description": "Fine Polished",
"productGroup": {
"id": 3,
"name": "Hand Reveter",
}
},
]
search = (item, searchedText) => {
return item["code"].toLowerCase().indexOf(searchedText.toLowerCase()) > -1
}
const searchTerm = 'hr001';
function score(a) {
return Math.abs(searchTerm.length - a.code.length);
}
var ac = items.filter((item) => {
return search(item, searchTerm);
}).sort((a, b) => {
//sort by score, if equal fall back to compare.
return score(a) - score(b) ||
a.code.localeCompare(b.code);
});
console.log(ac);
// var sortWithInputText = ac.sort(..........................)