You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于变量高效选择对应数组?求替代多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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:41:01