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

如何基于fromTime和toTime对对象数组分组?解决lodash groupBy单参数限制

解决方案:基于多字段用Lodash的groupBy()分组

嘿,这事儿好办!你觉得_.groupBy()只能传单个字段参数?其实它的迭代函数可以返回任意能唯一标识分组的键——比如把fromTime和toTime组合起来,就能实现你要的分组效果。

具体实现步骤

  1. 用组合键分组:给_.groupBy()传一个函数,返回包含fromTime和toTime的数组(Lodash支持用数组作为分组键,会自动转换成唯一的字符串标识)。
  2. 转换分组结构:把分组后的对象转换成你需要的数组格式,提取days、time和sign字段。

完整代码示例

const _ = require('lodash'); // 或ES模块:import _ from 'lodash'

// 原始数据
let data = [ 
  {sign: 'open', day: 'mon', fromTime :'1:00 pm', toTime: '3:00 pm'}, 
  {sign: 'open', day: 'tue', fromTime :'2:00 pm', toTime: '6:00 pm'}, 
  {sign: 'open', day: 'wed', fromTime :'1:00 pm', toTime: '3:00 pm'}, 
  {sign: 'open', day: 'thu', fromTime :'2:00 pm', toTime: '6:00 pm'}
];

// 第一步:基于fromTime和toTime分组
const groupedData = _.groupBy(data, item => [item.fromTime, item.toTime]);

// 第二步:转换为目标格式
const updated = _.map(groupedData, (groupItems) => ({
  days: groupItems.map(item => item.day),
  time: { 
    fromTime: groupItems[0].fromTime, 
    toTime: groupItems[0].toTime 
  },
  sign: groupItems[0].sign
}));

console.log(updated);

输出结果

运行后你会得到完全符合预期的结构:

[
  { 
    days: ['mon','wed'], 
    time: { fromTime: '1:00 pm', toTime: '3:00 pm'}, 
    sign:'open' 
  }, 
  { 
    days: ['tue','thu'], 
    time: { fromTime: '2:00 pm', toTime: '6:00 pm'}, 
    sign:'open' 
  }
]

补充说明

  • 如果你担心数组键的兼容性,也可以用字符串拼接作为分组键,比如:item => ${item.fromTime}|${item.toTime}``,效果完全一样,只是数组写法更直观。
  • 示例中假设所有同时间组的sign字段一致,如果有不一致的情况,可以根据需求调整(比如把sign也加入分组键,或者在转换时处理)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:55:49