如何简化多个独立if语句(非if else)实现数组条件push操作
多独立条件判断推入数组的简洁实现方案
你当前使用多个独立if逐次执行push的写法逻辑正确,但重复的条件判断、push语句属于冗余模板代码,判断分支较多时维护成本会升高。以下几种写法和原逻辑完全等价:所有条件相互独立,多个条件同时满足时对应值都会被收集,不存在if else分支的互斥问题。
配置映射遍历法(推荐,易扩展维护)
将「判断条件」和「条件成立时要推入的值」组织为配对的配置数组,通过过滤收集符合条件的目标值。这套写法不依赖条件和数组索引的绑定关系,后续增删判断逻辑只需要修改配置项,不需要重复编写if、push的重复结构,出错概率更低。
// 配置项格式:[判断条件, 对应推入值] const conditionValuePairs = [ [someArray[0].value, x], [someArray[1].value, y], [someArray[2].value, z], // 新增判断直接追加配置条目即可 ]; const pushedValues = conditionValuePairs .filter(([condition]) => Boolean(condition)) .map(([, value]) => value);
如果你的判断逻辑和示例完全一致,即按someArray的索引顺序对应待推入的值,可以进一步简化代码:
// 待推入值按与someArray对应的索引顺序排列 const candidates = [x, y, z]; const pushedValues = candidates.filter((_, idx) => Boolean(someArray[idx].value));
数组展开+短路判断(适合分支较少的轻量场景)
如果判断分支在3个以内,可以直接在数组字面量中用三元判断配合扩展运算符实现:条件成立时展开包含目标值的单元素数组,不成立时展开空数组,代码紧凑无冗余。
const pushedValues = [ ...(someArray[0].value ? [x] : []), ...(someArray[1].value ? [y] : []), ...(someArray[2].value ? [z] : []), ];
避坑提示:不要为了缩短代码写
someArray[0].value && pushedValues.push(x)这类链式短路写法,push方法返回值是数组的最新长度,在链式调用场景下很容易引发非预期问题,可读性也较差。
内容的提问来源于stack exchange,提问作者Nils
相关产品推荐
相关产品推荐

