如何简化JavaScript多层嵌套if语句、降低代码复杂度
代码优化方案
原来的嵌套if语句作用是累加room_spend数组的前6项数值到总消费c中,完全可以简化,甚至一行实现,不需要写多层嵌套判断。
简化后的完整代码
var previous_stays = 12, booking_agency_id = null, reservation_spend = 375.95, room_spend = [12.23,2.35,null,17.99], reservation_nights = 4, gold_tier = 0; while (gold_tier == 0) { const a = previous_stays >= 5; const b = !booking_agency_id; const d = reservation_nights; // 原来的6层嵌套if直接替换为下面一行,自动累加前6项,空值自动转为0不影响计算 const c = reservation_spend + room_spend.slice(0,6).reduce((sum, val) => sum + (Number(val) || 0), 0); if (!((c/d > 250) && a && b)) break; gold_tier = 1; }
优化说明
- 用
slice(0,6)取数组前6个元素,正好匹配原代码最多累加到索引5的逻辑,哪怕数组长度不足6也不会报错 - 用
reduce方法遍历累加,Number(val) || 0兼容原代码中null值加总时转为0的行为,逻辑和原代码完全一致 - 整个嵌套逻辑压缩为1行,可读性和可维护性都远高于原来的多层嵌套判断
如果你确实想用forEach实现也可以,写法如下:
let c = reservation_spend; room_spend.slice(0,6).forEach(val => c += Number(val) || 0);
效果和reduce的写法完全一致,只是没有reduce那么简洁。
内容的提问来源于stack exchange,提问作者Todd Tate
相关产品推荐
相关产品推荐

