javascript - 有没有办法重构这个 AND 和 XOR 逻辑分支?
问题描述
我有 2 个用户 ID,如果我只有一个或两个,我想做不同但非常相似的逻辑。有没有办法整合这段代码,因为现在它看起来很丑。
function getUserPermission(primaryId, secondaryId, role) {
let permission = userInfo.permissionList.filter( permission => {
//logical AND
if(primaryId && secondaryId){
// have both IDs, use both IDs
(permission.primaryId === primaryId && permission.secondaryId === secondaryId) && permission.role === role
}
//logical XOR
else if((primaryId && !secondaryId) || (!primaryId && secondaryId)) {
// have only 1 ID, use 1 ID
(permission.primaryId === primaryId || permission.secondaryId === secondaryId) && permission.role === role
}
})[0]
return permission
}
解决方案
这样的事情呢?
if(!primaryId && !secondaryId) {
throw Error("No ID was provided");
}
let permission = userInfo.permissionList.filter(p => p.role === role);
if(primaryId) {
permission = permission.filter(p => p.primaryId === primaryId);
}
if(secondaryId) {
permission = permission.filter(p => p.secondaryId === secondaryId);
}
return permission[0];
推荐阅读
- git - git clone 排除 lfs 文件
- ansible - 如何在 ansible 中运行 AWS 命令
- c++ - 使用 dart:ffi 实现 winapi(SendInput)
- m2doc - 兼容 capella 1.4.0 的 M2DOC 版本何时可用?
- sql - 将 Sql Schema 转换为 JDL 格式
- javascript - 在更改视图网格 fullcalendar v4 上拖放后,带有 rrule 插件的事件未更新
- c# - 在 asp.net 核心中使用返回 url 和 cookie 身份验证
- excel - 我可以使用 Python 自动更改 Excel 插件中的提示吗?
- java - Java, Inheritance, Generics - using parameters of subtypes in template method implementations
- python - 如何在另一个脚本中运行一个脚本?