如何基于变量高效选择对应数组?求替代多if分支的优化方案
更优雅的数组选择方案替代大量if分支
嘿,完全懂你的困扰——一堆if/else或者switch判断selector来选数组,不仅代码臃肿,后续加新的selector和数组时还要改逻辑,维护起来太麻烦了。给你几个更简洁高效的实现方案:
方案1:对象映射(最常用推荐)
把selector和对应的数组以键值对的形式存在一个对象里,之后直接通过selector取值就行,逻辑清晰还易维护:
// 先定义selector到数组的映射关系 const arraySelectorMap = { 1: array1, 2: array2, 3: array3, // 后续要加新的selector和数组,直接在这里加键值对就行 }; // 根据selector获取目标数组并输出 const targetArray = arraySelectorMap[selector]; if (targetArray) { console.dir(targetArray); } else { console.log(`未找到与selector ${selector} 对应的数组`); }
这个方案的优势:
- 可读性强,一眼就能看到selector和数组的对应关系
- 扩展性好,新增/修改映射只需要操作对象,不用改动判断逻辑
- 查找效率是O(1),和if分支比起来性能更稳定(尤其是selector值很多的时候)
方案2:数组索引(适合selector为连续数字的场景)
如果你的selector是从1开始的连续整数(比如1、2、3...),可以把所有数组放进一个容器数组,利用数组索引来匹配:
// 按selector顺序把数组存入容器(索引0对应selector1,索引1对应selector2) const arraysContainer = [array1, array2, array3]; const targetArray = arraysContainer[selector - 1]; if (targetArray) { console.dir(targetArray); } else { console.log(`未找到与selector ${selector} 对应的数组`); }
这个方案更简洁,但局限性也明显——只适用于selector是连续整数的情况,灵活性不如对象映射。
方案3:Map对象(支持复杂键类型)
如果你的selector不是简单的数字/字符串(比如需要用对象、Symbol等当键),可以用ES6的Map来实现,它支持更多类型的键:
// 创建Map映射 const arrayMap = new Map([ [1, array1], ['userList', array2], [{type: 'config'}, array3], // 甚至可以用对象当键 ]); // 获取目标数组 const targetArray = arrayMap.get(selector); if (targetArray) { console.dir(targetArray); } else { console.log(`未找到与selector ${selector} 对应的数组`); }
总结
- 优先用对象映射:大多数场景下都适用,代码简洁易维护
- 连续数字selector用数组索引:最精简的实现
- 复杂键类型用Map:特殊场景下的灵活选择
内容的提问来源于stack exchange,提问作者user5024556
相关产品推荐
相关产品推荐

