JavaScript forEach循环奇偶元素传差异化配置的优雅写法求教
奇偶索引差异化传参的冗余代码优化方案
你当前的实现重复定义了绝大多数完全相同的配置属性,后续修改公共属性时需要同时改两处,非常容易漏改出bug,以下是更精简易维护的写法:
方案1:直接在对象定义时通过三元表达式处理差异属性
适合差异属性只有1-2个的简单场景,代码量最少:
const myFuncSettings = { "setting-name-1": setting-value-a, "setting-name-2": setting-value-b, "setting-name-3": i % 2 ? setting-value-c : setting-value-z } $(this).myFunc(myFuncSettings);
方案2:抽离公共基础配置再合并差异
适合公共属性较多、后续可能新增更多差异配置的场景,公共属性只需要维护一份:
// 所有场景通用的配置单独抽离,修改时只需要改这一处 const baseSettings = { "setting-name-1": setting-value-a, "setting-name-2": setting-value-b } // 基于公共配置合并当前场景的差异属性 const myFuncSettings = i % 2 ? { ...baseSettings, "setting-name-3": setting-value-c } : { ...baseSettings, "setting-name-3": setting-value-z } $(this).myFunc(myFuncSettings);
方案3:抽离差异映射表
适合判断规则后续会扩展的场景,把配置和逻辑完全解耦:
// 单独维护差异值的映射规则,后续加新的判断分支不用改核心调用逻辑 const DIFF_VALUE_MAP = { odd: setting-value-c, even: setting-value-z } const myFuncSettings = { "setting-name-1": setting-value-a, "setting-name-2": setting-value-b, "setting-name-3": DIFF_VALUE_MAP[i % 2 === 1 ? 'odd' : 'even'] } $(this).myFunc(myFuncSettings);
额外注意点
- 不要使用
var声明变量,配置对象不会被重新赋值的场景优先用const,避免变量提升导致的意外问题 - 带中划线的对象键名必须包裹引号,否则会被JS解析为减法运算报语法错误
- 不要在循环里重复定义完全相同的对象结构,尽可能抽离公共部分减少冗余
内容的提问来源于stack exchange,提问作者filippo
相关产品推荐
相关产品推荐

