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

如何按日期、月份、年份统计Economy预订记录的数量

按时间维度统计Economy预订记录的函数实现

需求说明

已有一个统计Booked为Economy的总记录数的statusCounter函数,现在需要实现一个支持按年份、月份、日期三个维度分别统计该类型记录数量的函数。

示例数据

// data.js
[
  {
    _id: "1",
    Name: "John",
    Booked: "Executive",
    date: "2023-03-02T18:15:26.723+00:00"
  },
  {
    _id: "2",
    Name: "Peter",
    Booked: "Economy",
    date: "2023-03-19T19:15:26.723+00:00"
  },
  {
    _id: "3",
    Name: "Wade",
    Booked: "Economy",
    date: "2024-04-19T19:15:26.723+00:00"
  },
  {
    _id: "4",
    Name: "Mary",
    Booked: "Economy",
    date: "2024-04-20T19:15:26.723+00:00"
  }
]

原有统计函数

// countfunction.js
statusCounter(inputs) {
  let counter = 0;
  for (const input of inputs) {
    if (input.Booked === 'Economy') counter += 1;
  }
  return counter;
}

实现方案

我们可以编写一个新函数statusCounterByTime,通过指定时间维度参数,完成分维度统计:

function statusCounterByTime(inputs, timeDimension = 'date') {
  // 先过滤出所有Booked为Economy的记录
  const economyRecords = inputs.filter(item => item.Booked === 'Economy');
  
  // 初始化统计结果对象
  const countResult = {};

  economyRecords.forEach(record => {
    const date = new Date(record.date);
    let timeKey;

    // 根据指定维度生成对应的时间键
    switch(timeDimension) {
      case 'year':
        timeKey = date.getFullYear().toString();
        break;
      case 'month':
        // 月份从0开始,需+1,统一格式为YYYY-MM
        timeKey = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}`;
        break;
      case 'date':
      default:
        // 日期格式统一为YYYY-MM-DD
        timeKey = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
    }

    // 更新统计计数
    countResult[timeKey] = (countResult[timeKey] || 0) + 1;
  });

  return countResult;
}

函数说明

  1. 参数说明:
    • inputs:待统计的原始数据数组
    • timeDimension:可选参数,支持'year'(按年)、'month'(按月)、'date'(按日),默认值为'date'
  2. 逻辑步骤:
    • 先过滤出所有Booked为Economy的记录,减少后续遍历的数量
    • 根据指定维度生成标准化的时间键,避免格式不一致导致统计错误
    • 使用对象存储每个时间维度对应的计数,遍历更新数值

示例用法

// 按年份统计
console.log(statusCounterByTime(data, 'year'));
// 输出:{ '2023': 1, '2024': 2 }

// 按月份统计
console.log(statusCounterByTime(data, 'month'));
// 输出:{ '2023-03': 1, '2024-04': 2 }

// 按日期统计
console.log(statusCounterByTime(data));
// 输出:{ '2023-03-19': 1, '2024-04-19': 1, '2024-04-20': 1 }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:50:22