我已经尝试过有关此问题Using filter() in combination with includes() to get partial matches的答案
但是对于我而言,这并不能真正解决问题,因为只有文本小于数组中的值时,此答案才有效。
我现在正在使用此代码,在我提供的示例中可以正常工作并找到“ alex”:
let search = (list, text) =>
list.filter(i => i.toLowerCase().includes(text.toLowerCase()));
var items = ['john', 'bob', 'alex'];
var result = search(items, 'al');
console.log(result);
但是,如果我运行result = search(items, 'alexander')
,它将无法正常工作,在我的用例中,我还需要能够以这种方式查找项目。
要说明为什么我需要这样做,我让用户拥有一系列权限角色,例如['admin.all', 'calendar.self', 'calendar.other']
,并且菜单项也有一个参数,例如calendar
,它们也指定了它们所属的范围(部分),然后使用这2确定用户是否应该看到菜单项。
我希望能够运行result = search(menuRoles, 'calendar.self')
并让角色calendar
返回给我,这意味着我可以显示它。
答案 0 :(得分:5)
检查您的搜索值是否还包含当前字符串
let search = (list, text) =>
list.filter(i => i.toLowerCase().includes(text.toLowerCase()) || text.toLowerCase().includes(i.toLowerCase()));
var items = ['john', 'bob', 'alex'];
var result = search(items, 'alexander');
console.log(result);