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

如何用JavaScript将含日期键的JSON文件按月份拆分

按月份拆分日期键JSON数据的正确实现

首先得指出你之前代码的两个核心问题:

  1. 你的main是一个数组,里面才是包含日期键的对象,直接for(key in main)遍历的是数组的索引(比如0),而不是日期键;
  2. 你用jan.push(main[key], key)把键和值分别推入数组,得到的是扁平结构,但你需要的是保留键值对的对象,不是数组。

下面是正确的实现步骤(以Node.js环境为例,因为涉及写入文件):

步骤1:处理数据结构,按月份分组

首先我们需要把原数据里的日期键值对按月份归类到不同的对象中:

// 你的原始数据
const main = [{"2018-01-01":277,"2018-01-08":361, "2018-02-05":357,"2018-02-12":367, "2018-03-05":481,"2018-03-12":445, "2018-04-02":484,"2018-04-09":345}];

// 取出数组里的日期对象(因为main是数组包裹的对象)
const dateData = main[0];

// 初始化每个月份的空对象,用来存对应月份的键值对
const monthlyData = {
  "2018-01": {},
  "2018-02": {},
  "2018-03": {}
};

// 遍历日期对象的所有键
for (const dateKey of Object.keys(dateData)) {
  // 提取月份部分(比如"2018-01-01"取前7位得到"2018-01")
  const month = dateKey.substring(0, 7);
  // 如果当前月份在我们的目标分组里,就把键值对添加进去
  if (monthlyData[month]) {
    monthlyData[month][dateKey] = dateData[dateKey];
  }
}

步骤2:将分组后的数据写入对应JSON文件

接下来我们可以用Node.js的fs模块把每个月份的对象写入单独的JSON文件:

const fs = require('fs').promises; // 用异步Promise版本更优雅

// 定义写入文件的函数
async function writeMonthlyFiles() {
  for (const [month, data] of Object.entries(monthlyData)) {
    // 把对象转换成格式化的JSON字符串
    const jsonStr = JSON.stringify(data, null, 2);
    // 写入文件,文件名比如"2018-01.json"
    await fs.writeFile(`${month}.json`, jsonStr, 'utf8');
    console.log(`已生成${month}.json文件`);
  }
}

// 执行写入操作
writeMonthlyFiles().catch(err => console.error('写入文件出错:', err));

最终效果

执行后你会得到三个文件:

  • 2018-01.json内容:

{"2018-01-01":277,"2018-01-08":361}

  • 2018-02.json内容:

{"2018-02-05":357,"2018-02-12":367}

  • 2018-03.json内容:

{"2018-03-05":481,"2018-03-12":445}

如果是浏览器环境(不需要写文件),你可以直接使用monthlyData里的各个月份对象,比如monthlyData["2018-01"]就是1月的完整键值对数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:53:31