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

如何从API返回的对象数组创建按日期分组的嵌套对象

问题

如何遍历API响应返回的对象数组,动态创建一个按日期分组的嵌套对象?示例如下:

现有对象数组:

var objectsArray = [obj1, obj2, obj3];

其中每个对象的结构:

var obj1 = {
    date: "8/25/23",
    id: "Guid1",
    imgUrl: "www.img1.com",
};

var obj2 = {
    date: "8/25/23",
    id: "Guid2",
    imgUrl: "www.img2.com",
};

var obj3 = {
    date: "8/30/23",
    id: "Guid3",
    imgUrl: "www.img3.com",
};

需要生成按日期分组的嵌套对象,最终结果如下:

var objWithoutDuplicateDates = {
    "8/25/23": {
        images: ["www.img1.com", "www.img2.com"]
    },
    "8/30/23": {
        images: ["www.img3.com"]
    }
};
解决方案

方法一:用forEach遍历构建

这是最直观的实现方式,逐一遍历数组元素并完成分组:

// 初始化空对象存储结果
const objWithoutDuplicateDates = {};

objectsArray.forEach(item => {
    const { date, imgUrl } = item;
    // 检查当前日期是否已在结果对象中
    if (objWithoutDuplicateDates[date]) {
        // 已存在则追加图片地址到对应数组
        objWithoutDuplicateDates[date].images.push(imgUrl);
    } else {
        // 不存在则创建新的日期键,并初始化图片数组
        objWithoutDuplicateDates[date] = {
            images: [imgUrl]
        };
    }
});

方法二:用Array.reduce简化代码

reduce可以在一次遍历中完成对象构建,代码更简洁:

const objWithoutDuplicateDates = objectsArray.reduce((acc, item) => {
    const { date, imgUrl } = item;
    // 累加器中无当前日期时,初始化对应结构
    if (!acc[date]) {
        acc[date] = { images: [] };
    }
    // 将图片地址加入对应数组
    acc[date].images.push(imgUrl);
    // 返回累加器供下一次迭代使用
    return acc;
}, {}); // 初始值设为空对象

两种方法都能实现需求,forEach更易理解,reduce适合偏好函数式编程的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:15:55