filter()与include()一起获得部分匹配

时间:2019-05-31 09:20:50

标签: javascript

我已经尝试过有关此问题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返回给我,这意味着我可以显示它。

1 个答案:

答案 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);