首页 > 解决方案 > 有没有办法重构这个 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
}

标签: javascriptlogical-operatorsboolean-logicboolean-operations

解决方案


这样的事情呢?

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];

推荐阅读