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

如何缩短含条件的嵌套数组过滤函数并避免代码重复?

精简优化方案

原代码的核心冗余点是重复的过滤逻辑和几乎完全一致的map回调,只需要把差异部分抽离,就能在保留原有功能的前提下大幅精简:

优化后的代码

const getCommonCreditProps = (creditProgram, term) => {
  // 统一执行过滤,避免重复编写
  const filteredIns = creditProgram.insuranceProducts.filter(i => i.code !== 'ins_cp_st_avtomoblst_4');

  // 抽离通用的保险项处理逻辑,通过调整值区分加减操作
  const processIns = (adjustment) => (ins) => {
    let rateDiscount = 0;
    try {
      rateDiscount = ins.discountFieldName + adjustment;
    } catch (err) {
      console.error(err);
    }
    return {
      ...ins,
      productName: getInsurancesName(ins.type, rateDiscount || 0),
      discount: rateDiscount || 0,
    };
  };

  // 根据term选择对应的调整值,执行map转换
  const currentInsurances = filteredIns.map(processIns(term > 47 ? 1 : -1));

  return { currentInsurances };
};

关键优化点

  • 消除重复过滤:把filter逻辑提出来只执行一次,避免在三元运算符里重复写相同的过滤代码
  • 抽离通用处理函数:用高阶函数processIns封装map回调的通用逻辑,仅通过adjustment参数(1或-1)处理term > 47带来的差异,彻底避免重复代码
  • 减少可变变量:用const替代let,所有变量只声明一次,代码更稳定易读
  • 完全保留原有功能:错误处理、折扣计算规则、返回结构和原代码完全一致,没有任何功能改动

可选进一步精简(如果允许调整错误处理逻辑)

如果可以确定discountFieldName是数字类型或不存在时不会抛出错误,也可以把try-catch换成类型判断,进一步缩短代码:

const processIns = (adjustment) => (ins) => {
  const rateDiscount = typeof ins.discountFieldName === 'number' ? ins.discountFieldName + adjustment : 0;
  return {
    ...ins,
    productName: getInsurancesName(ins.type, rateDiscount),
    discount: rateDiscount,
  };
};

内容的提问来源于stack exchange,提问作者jeje

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:05:21