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

如何降低Node.js中LocationId数据获取及时间筛选代码的复杂度?

优化后的Node.js代码实现

核心优化思路

  • 用配置映射表替代冗余的if-else分支,降低代码复杂度
  • 单独抽离Day类型的特殊逻辑,确保循环获取当日数据的需求
  • 统一构建查询条件,减少重复代码

优化代码

// 定义筛选配置映射表,统一管理各类型的参数
const filterConfig = {
  Day: {
    graphData: graph_data_of_day,
    dateQuery: { gt: current_date },
    includeRef: true,
    needLoop: true // 标记Day类型需要循环获取数据
  },
  Week: {
    graphData: graph_data_of_weeks,
    dateQuery: { gte: startofweek_date, lte: endofweek_date },
    includeRef: true
  },
  Month: {
    graphData: graph_data_of_months,
    dateQuery: { gte: startOfMonth_date, lte: endOfMonth_date },
    includeRef: true
  },
  Year: {
    graphData: graph_data_of_year,
    dateQuery: { gte: startOfYear_date, lte: endOftheYear_date },
    includeRef: true
  },
  custom: {
    graphData: [1, 2, 3, 4, 5, 7, 3, 12, 4, 2, 5, 6],
    dateQuery: { gte: custom_start_date, lt: custom_end_date },
    includeRef: false
  }
};

// 获取当前筛选类型的配置
const config = filterConfig[filter_by];
if (!config) {
  // 处理未定义的筛选类型,可根据需求添加默认逻辑
  graph_data = [];
  query = {};
} else {
  graph_data = config.graphData;
  
  // 构建基础查询条件
  query = {
    created_at: config.dateQuery
  };
  
  // 添加ref字段(如果配置要求)
  if (config.includeRef && headerData?.ref) {
    query.ref = headerData.ref;
  }
  
  // 添加locationid筛选条件(非Day类型时,按locationid或默认获取)
  if (!config.needLoop && locationid) {
    query.locationid = locationid;
  }
  
  // Day类型特殊逻辑:无论locationid是否为空,循环获取当日数据
  if (config.needLoop) {
    // 这里替换成你的循环获取逻辑,示例:
    const fetchDayData = async () => {
      const targetLocations = locationid ? [locationid] : getDefaultLocations();
      for (const loc of targetLocations) {
        const dayData = await fetchYourData({ ...query, locationid: loc });
        // 处理获取到的当日数据,比如合并到graph_data
        mergeGraphData(graph_data, dayData);
      }
    };
    await fetchDayData();
  }
}

优化点说明

  1. 配置映射表:把每个筛选类型对应的graph_data、日期范围、是否需要ref等参数集中管理,后续新增筛选类型只需在配置表中添加,无需修改逻辑代码。
  2. Day类型特殊处理:通过needLoop标记区分,单独处理循环逻辑,确保无论locationid是否为空,都按给定值(或默认列表)循环获取当日数据。
  3. 动态构建查询:统一处理ref和locationid的添加逻辑,避免重复的对象赋值代码。
  4. 容错处理:增加了未定义筛选类型的默认逻辑,提升代码健壮性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:05:15