JavaScript中如何按指定优先级筛选字符串类型角色数组
JS按优先级筛选角色实现方案
规则梳理
先明确筛选逻辑优先级:
- 第一优先级:返回
roles数组中匹配admin-*通配规则(即以admin-为前缀)的角色 - 第二优先级:若不存在符合第一优先级的角色,返回数组中的
dist-users角色 - 兜底逻辑:若数组中以上两类角色都不存在,默认返回
dist-users
实现代码
function getMatchedRole(userObj) { const roleList = userObj.roles ?? []; // 优先匹配admin-前缀的角色 const matchedAdminRoles = roleList.filter(role => role.startsWith('admin-')); if (matchedAdminRoles.length) { // 若需要返回所有同优先级的admin角色,直接return matchedAdminRoles即可 return matchedAdminRoles[0]; } // 非admin角色场景统一返回dist-users,覆盖数组存在该角色、兜底两种情况 return 'dist-users'; } // 测试示例 const user = { "clientName": "xyz", "exp": 0, "roles": [ "dist-users", "admin-dev" ] }; console.log(getMatchedRole(user)); // 输出: admin-dev
补充说明
- 当前场景下
admin-*是前缀匹配规则,用原生startsWith方法实现性能更好、代码更简洁,不需要额外引入正则或者通配匹配库。 - 如果业务要求返回所有匹配最高优先级的角色(比如用户同时绑定
admin-dev、admin-ops两个角色时需要全部返回),只需把admin角色匹配分支的返回值改为return matchedAdminRoles即可。
内容的提问来源于stack exchange,提问作者s d
相关产品推荐
相关产品推荐

