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

JavaScript中如何将对象按相同日期键分组存入对应数组

JavaScript 数组按日期字段分组实现

需求说明

现有如下格式的对象数组:

let data = [
    {
       date: "2022-07-22T08:55:07.438",
        title: "Test topic meeting "
    },
    {
       date: "2022-07-22T08:55:07.438",
        title: "virtual log"
    },
    {
       date: "2022-07-23T08:55:07.438",
        title: "Hello test"
    },
]

需要提取每个对象date字段的年月日部分作为对象键,将同一日期对应的所有对象归集到该键对应的数组中,最终输出结构如下:

{
    "2022-07-22": [
        {
           date: "2022-07-22T08:55:07.438",
            title: "Test topic meeting"
        },
        {
           date: "2022-07-22T08:55:07.438",
            title: "virtual log"
        }
    ],
    "2022-07-23": [
        {
           date: "2022-07-23T08:55:07.438",
            title: "Hello test"
        }
    ]
}

实现代码

方法1:reduce 简洁实现

最常用的数组分组写法,代码精简:

const groupedData = data.reduce((res, item) => {
    // 针对ISO格式日期,直接截取T前的年月日部分作为分组键
    const dateKey = item.date.split('T')[0]
    // 不存在对应分组时先初始化空数组
    if (!res[dateKey]) res[dateKey] = []
    res[dateKey].push(item)
    return res
}, {})

如果date字段格式不固定,不是标准ISO时间格式,可以用通用日期格式化方法生成键,适配不同输入:

// 通用YYYY-MM-DD格式日期键生成方法
const formatDateKey = (dateStr) => {
    const d = new Date(dateStr)
    const year = d.getFullYear()
    const month = String(d.getMonth() + 1).padStart(2, '0')
    const day = String(d.getDate()).padStart(2, '0')
    return `${year}-${month}-${day}`
}

// 替换之前的dateKey取值逻辑即可
const dateKey = formatDateKey(item.date)

方法2:普通for循环实现

逻辑直白,无高阶API依赖,兼容性更好:

const groupedData = {}
for (let i = 0; i < data.length; i++) {
    const item = data[i]
    const dateKey = item.date.split('T')[0]
    if (!groupedData[dateKey]) {
        groupedData[dateKey] = []
    }
    groupedData[dateKey].push(item)
}

两种方法最终输出的结果完全符合需求,运行后打印groupedData即可得到目标结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:36:15