如何简化多条件判断的JavaScript数组生成代码
多条件生成有序数组的代码简化方案
原有问题
实现依赖多条件判断生成对应数组的功能时,原有代码嵌套层级深、可读性差,难以快速理解实现意图,且数组内元素排列顺序有严格要求,待优化的原始代码如下:
const createArrayByConditions = (condition1, condition2, condition3, condition4) => { if (condition1) { if (condition4) { return [ 1, 4, 999, ]; } else { return [1, 999]; } } if (condition2) { if (condition4) { return [ 2, 4, 999, ]; } return [2, 999]; } if (condition3) { if (condition4) { return [ 3, 4, 999, ]; } else { return [3, 999]; } } if (condition4) { return [4, 999]; } else { return [999]; } };
逻辑规律拆解
先梳理所有分支的共性规则,不需要保留多层嵌套的分支写法:
- 条件优先级从高到低为
condition1>condition2>condition3>condition4,高优先级条件命中时直接忽略低优先级条件的主值判定 - 数组尾部固定为元素
999 - 当
condition4为真时,主元素和尾部999之间固定插入元素4 - 主元素取值规则:
condition1为真取1,否则condition2为真取2,否则condition3为真取3,前三个条件都不满足则无主元素
简化后实现
按照元素的排列顺序线性构建数组,完全消除嵌套判断:
const createArrayByConditions = (condition1, condition2, condition3, condition4) => { const result = []; // 按优先级添加首位主元素 if (condition1) result.push(1); else if (condition2) result.push(2); else if (condition3) result.push(3); // 按condition4判断是否插入中间元素4 if (condition4) result.push(4); // 添加固定尾部元素 result.push(999); return result; };
一致性说明
所有分支的返回结果和原代码完全一致,且天然满足元素顺序要求:
condition1为真时,根据condition4真假返回[1,4,999]或[1,999]condition1假、condition2真时,根据condition4真假返回[2,4,999]或[2,999]condition1、condition2假、condition3真时,根据condition4真假返回[3,4,999]或[3,999]- 前三个条件都假时,根据
condition4真假返回[4,999]或[999]
这种写法逻辑是线性顺承的,每一步的操作意图清晰,后续新增条件或调整元素顺序时,只需要在数组构建的对应位置添加逻辑即可,维护成本远低于嵌套分支写法。
内容的提问来源于stack exchange,提问作者ryoshpa
相关产品推荐
相关产品推荐

