如何使用Enum枚举引用简化判断,正确获取符合要求的数组值
实现方案
你可以通过遍历优先级属性序列的方式简化逻辑,完全复用现有enums.ORDER枚举,不需要多层if else判断:
getLastActive = (current) => { // 按枚举定义的优先级生成属性序列,顺序为 primary -> denary const priorityProps = Object.values(enums.ORDER); let lastActive; // 遍历找到第一个符合条件的元素后终止遍历 priorityProps.some(prop => { const targetItem = current[prop] && current[prop][0]; if (targetItem && targetItem.coverage.purchaser.name !== 'customer') { lastActive = targetItem; return true; } return false; }); return lastActive; }
逻辑说明
Object.values(enums.ORDER)会按枚举数字键的升序返回属性名数组,顺序刚好匹配你需要的primary到denary的优先级,不需要手动维护序列- 用
some方法遍历属性数组,只要找到第一个符合条件的元素就会终止遍历,和你原有if else的执行逻辑完全一致,不会额外消耗性能 - 保留了原有逻辑的边界判断:先校验数组首元素存在,再判断属性条件,不会出现属性读取报错
如果你的运行环境支持ES2020+的可选链语法,可以进一步简化判断:
getLastActive = (current) => { const priorityProps = Object.values(enums.ORDER); let lastActive; priorityProps.some(prop => { const targetItem = current[prop]?.[0]; if (targetItem?.coverage?.purchaser?.name !== 'customer') { lastActive = targetItem; return true; } return false; }); return lastActive; }
内容的提问来源于stack exchange,提问作者Muirik
相关产品推荐
相关产品推荐

