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

如何合并数组中timeslots相同的对象?

合并timeslots相同的数组对象思路建议

我需要处理一个数组,目标是合并其中timeslots完全相同的对象,合并时将它们的valid_days数组合并到一起。之前尝试循环遍历并对比各对象的timeslots,但由于每个timeslots都是不同的对象实例,直接对比无法判断内容是否一致。现在不需要完整解决方案,只希望得到对比思路或处理方向。

原数组

[
    {
        "valid_days": ["0"],
        "timeslots": [
            {
                "from_time": "09:00",
                "to_time": "12:00"
            }
        ]
    },
    {
        "valid_days": ["1"],
        "timeslots": [
            {
                "from_time": "09:00",
                "to_time": "12:00"
            }
        ]
    },
    {
        "valid_days": ["2"],
        "timeslots": [
            {
                "from_time": "09:00",
                "to_time": "12:00"
            },
            {
                "from_time": "13:00",
                "to_time": "15:00"
            }
        ]
    },
    {
        "valid_days": ["3"],
        "timeslots": [
            {
                "from_time": "09:00",
                "to_time": "12:00"
            },
            {
                "from_time": "13:00",
                "to_time": "15:00"
            }
        ]
    }
]

期望结果

[
    {
        "valid_days": ["0", "1"],
        "timeslots": [
            {
                "from_time": "09:00",
                "to_time": "12:00"
            }
        ]
    },
    {
        "valid_days": ["2", "3"],
        "timeslots": [
            {
                "from_time": "09:00",
                "to_time": "12:00"
            },
            {
                "from_time": "13:00",
                "to_time": "15:00"
            }
        ]
    }
]

思路方向

  • 生成可对比的timeslots标识:把timeslots转换成可哈希的统一格式,比如将timeslots数组序列化为JSON字符串(JSON.stringify(timeslots)),或者把每个时间段拼接成from_time-to_time格式后用分隔符连接(比如09:00-12:00|13:00-15:00)。这样内容相同的timeslots会得到完全一致的标识,避开不同对象实例无法直接对比的问题。
  • 用哈希表分组合并:用对象或Map作为容器遍历原数组:
    • 对每个元素生成timeslots的标识,检查容器中是否存在该标识对应的条目;
    • 若存在,将当前元素的valid_days合并到条目的valid_days数组中;
    • 若不存在,将当前元素存入容器,以标识为键;
  • 提取结果:遍历完成后,把容器中的所有值提取出来,就是合并后的目标数组。

补充细节:如果timeslots中时间段的顺序不影响判定(比如顺序不同但内容相同也视为一致),可以先对timeslots按from_time排序,再生成标识,避免因顺序不同导致标识不一致。

内容的提问来源于stack exchange,提问作者Yorbjörn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:40:45