如何合并数组中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
相关产品推荐
相关产品推荐

