如何简化含大量IF分支的JavaScript统计函数?
精简目标JavaScript函数的方案
原函数的核心问题是通过冗长的if-else链处理重复逻辑,我们可以通过映射关系替代条件判断,同时优化重复操作来大幅精简代码,以下是两种可行方案:
方案一:利用字符ASCII码转换索引
function statistiekMaken() { const forbegin_z = 0; const forend_z = 49; const forby_z = 1; for (let z = forbegin_z; forby_z >= 0 ? z <= forend_z : z >= forend_z; z += forby_z) { // 缓存重复获取的分类值,减少函数调用 const category = getArrayValue(springers, z, 1); // 转换为对应统计项的索引(A→0,B→1…E→4) const index = category.charCodeAt(0) - 'A'.charCodeAt(0); // 仅处理有效分类,避免数组越界 if (index >= 0 && index <= 4) { statistieken[index][0] = getArrayValue(statistieken, index, 0) + 1; statistieken[index][1] += getArrayValue(springers, z, 2); } } }
方案二:使用对象映射表(更直观)
function statistiekMaken() { const forbegin_z = 0; const forend_z = 49; const forby_z = 1; // 明确定义分类与统计索引的对应关系 const categoryMap = { A: 0, B: 1, C: 2, D: 3, E: 4 }; for (let z = forbegin_z; forby_z >= 0 ? z <= forend_z : z >= forend_z; z += forby_z) { const category = getArrayValue(springers, z, 1); const index = categoryMap[category]; // 仅处理已定义的分类 if (typeof index !== 'undefined') { statistieken[index][0] = getArrayValue(statistieken, index, 0) + 1; statistieken[index][1] += getArrayValue(springers, z, 2); } } }
优化要点说明
- 减少重复调用:缓存
getArrayValue(springers,z,1)的结果,避免多次执行同一函数,提升性能。 - 消除条件链:通过映射关系直接获取统计项索引,彻底替代冗长的
if-else,代码更简洁且易扩展。 - 提升健壮性:增加有效索引判断,防止非A-E的字符导致数组越界错误。
- 规范变量声明:用
const声明常量、let声明循环变量,符合现代JavaScript语法规范。
内容的提问来源于stack exchange,提问作者LENNERT BUSSCHOTS
相关产品推荐
相关产品推荐

