我有以下数组,需要根据搜索文本“John”进行排序。
{id: 1, firstName: 'User', lastName: 'John', nickName: 'Smith'},
{id: 2, firstName: 'Test', lastName: 'John', nickName: 'Andrew'},
{id: 3, firstName: 'Test', lastName: 'Zch', nickName: 'John'},
{id: 4, firstName: 'Test', lastName: 'Mason', nickName: 'John'},
{id: 5, firstName: 'John', lastName: 'Doe'},
];
预期输出:
数组应首先使用 nickName(带有搜索文本)排序,然后是 lastName(带有搜索文本)。如果 nickName 不存在,那么它应该按照 ASC 排序顺序相对于 firstName(带有搜索文本)进行排序。注意:它应该将搜索文本单词视为“约翰”
这种排序类似于在您的手机联系人应用程序中使用排序进行搜索
[
// sort with nickName as higher relevance considering search text as John
{id: 4, firstName: 'Test', lastName: 'Mason', nickName: 'John'},
{id: 3, firstName: 'Test', lastName: 'Zch', nickName: 'John'},
// sort with lastName considering search text
{id: 2, firstName: 'Test', lastName: 'John', nickName: 'Andrew'},
{id: 1, firstName: 'User', lastName: 'John', nickName: 'Smith'},
// sort with firstName as nickName is null
{id: 5, firstName: 'John', lastName: 'Doe'},
];
我试过 localeMethod
function sortByLocale(user1, user2) {
var sortByNickName = user1.nickName.toLowerCase().localeCompare(user2.nickName.toLowerCase());
var sortByLastName = user1.lastName.toLowerCase().localeCompare(user2.lastName.toLowerCase());
return sortByNickName || sortByLastName;
}
但结果是在排序时没有考虑搜索文本。我可以看到一种方法是创建三个不同的数组并对它们进行排序并组合这些排序的数组任何帮助将不胜感激。
编辑:不考虑具有搜索文本值的不匹配对象