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

如何将日期关联价格的JavaScript对象按月份分组?

按月份分组日期-价格对象并计算月度最低价

核心实现思路

通过遍历对象的键值对,提取每个日期的年月标识(如2022-09)作为分组键,使用reduce方法高效完成分组。这种方法只需一次遍历原对象,性能最优,适合处理超长数据,后续可直接基于分组结果计算每月最低价。

分组代码实现

const obj = {
  "2022-09-17": 45,
  "2022-09-18": 35,
  "2022-09-19": 34,
  "2022-09-20": 26,
  "2022-09-21": 25,
  "2022-09-22": 33,
  "2022-09-23": 56,
  "2022-09-24": 39,
  "2022-09-25": 49,
  "2022-09-26": 25,
  "2022-09-27": 25,
  "2022-09-28": 25,
  "2022-09-29": 33,
  "2022-09-30": 42,
  "2022-10-01": 28,
  "2022-10-02": 38,
  "2022-10-03": 35,
  "2022-10-04": 25,
  "2022-10-05": 25,
  "2022-10-06": 31
};

// 按月份分组为对象格式(键为年月,值为对应日期价格对)
const groupedByMonth = Object.entries(obj).reduce((acc, [date, price]) => {
  // 提取前7位作为年月分组键
  const monthKey = date.slice(0, 7);
  // 初始化月份组(不存在时创建空对象)
  if (!acc[monthKey]) acc[monthKey] = {};
  // 将当前日期价格对加入对应月份组
  acc[monthKey][date] = price;
  return acc;
}, {});

// 转为数组格式(每个元素包含月份和对应数据),方便后续遍历
const groupedArray = Object.entries(groupedByMonth).map(([month, data]) => ({
  month,
  data
}));

分组结果说明

  • groupedByMonth:键为年月字符串(如2022-09),值为对应月份的所有日期-价格键值对对象。
  • groupedArray:数组结构,每个元素包含month(年月标识)和data(对应月份的日期价格集合),更直观适合遍历操作。

计算每月最低价格

基于分组结果,直接遍历计算即可:

const monthlyMinPrices = Object.entries(groupedByMonth).map(([month, data]) => {
  // 提取当前月份所有价格值,取最小值
  const minPrice = Math.min(...Object.values(data));
  return { month, minPrice };
});

console.log(monthlyMinPrices);
// 输出:
// [
//   { month: '2022-09', minPrice: 25 },
//   { month: '2022-10', minPrice: 25 }
// ]

方案优势

  1. 性能高效:仅一次遍历原对象完成分组,避免冗余循环,适配超长数据集。
  2. 原生兼容:使用JS原生方法实现,无需依赖第三方库,兼容性覆盖所有现代浏览器。
  3. 扩展性强:后续如需计算均价、最高价等指标,只需修改分组后的遍历逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:39:28