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

使用Lodash groupBy按日期、客户端ID及流程日期分组(忽略时间)

解决方案:用Lodash groupBy + 自定义日期处理逻辑

没问题!你完全可以用lodash的groupBy配合自定义的分组键生成逻辑来实现,不用自定义pipe也能搞定。我给你一步步拆解解决方案:

核心思路

groupBy支持传入自定义分组键生成函数,我们可以在这个函数里对日期做格式化处理,提取出仅日期部分,再把多个分组维度(处理后的date、client.id、处理后的process.date)组合成一个唯一的分组键,这样就能实现多维度按日期分组的需求。


步骤1:写通用的日期处理工具函数

你的数组里有两种日期格式:ISO标准格式(比如2018-02-01T19:24:05.524+05:30)和MM-DD-YYYY HH:mm:ss格式(比如02-01-2018 11:54:05),我们需要一个函数把它们统一转换成仅包含日期部分的字符串(比如2018-02-01):

const extractDateOnly = (dateStr) => {
  // 处理ISO格式日期,截取T之前的纯日期部分
  if (dateStr.includes('T')) {
    return dateStr.split('T')[0];
  }
  // 处理MM-DD-YYYY格式日期,转换为YYYY-MM-DD统一格式
  else {
    const [month, day, year] = dateStr.split(' ')[0].split('-');
    return `${year}-${month}-${day}`;
  }
};

步骤2:用Lodash groupBy实现多维度分组

接下来,我们把三个分组维度组合成一个唯一的键,传给groupBy:

import _ from 'lodash';

// 你的示例数组
const data = [
  { 
    "id":1, 
    "date": "2018-02-01T19:24:05.524+05:30", 
    "client":{ "id":1 }, 
    "process":{ "id":1, "date":"02-01-2018 11:54:05" } 
  }, 
  { 
    "id":2, 
    "date": "2018-02-01T17:35:05.524+05:30", 
    "client":{ "id":2 }, 
    "process":{ "id":2, "date":"02-01-2018 11:54:05" } 
  },
  // 新增测试数据,验证分组逻辑
  { 
    "id":3, 
    "date": "2018-02-02T10:00:00.000+05:30", 
    "client":{ "id":1 }, 
    "process":{ "id":3, "date":"02-02-2018 09:00:00" } 
  }
];

// 执行分组:组合三个维度生成唯一键
const groupedData = _.groupBy(data, item => {
  const mainDate = extractDateOnly(item.date);
  const clientId = item.client.id;
  const processDate = extractDateOnly(item.process.date);
  // 用字符串拼接生成唯一分组键,格式可自定义
  return `${mainDate}-client-${clientId}-process-${processDate}`;
});

console.log(groupedData);

结果说明

运行代码后,groupedData会是一个结构化对象,键是我们组合的分组字符串,值是对应分组下的数组项:

  • 2018-02-01-client-1-process-2018-02-01 对应id=1的项
  • 2018-02-01-client-2-process-2018-02-01 对应id=2的项
  • 2018-02-02-client-1-process-2018-02-02 对应id=3的项

进阶:嵌套分组(可选)

如果你想要更清晰的层级结构(先按主date分,再按client.id分,最后按process.date分),可以嵌套使用groupBy:

// 嵌套分组:层级化展示分组结果
const nestedGrouped = _.groupBy(data, item => extractDateOnly(item.date));
Object.keys(nestedGrouped).forEach(dateKey => {
  nestedGrouped[dateKey] = _.groupBy(nestedGrouped[dateKey], item => item.client.id);
  Object.keys(nestedGrouped[dateKey]).forEach(clientId => {
    nestedGrouped[dateKey][clientId] = _.groupBy(nestedGrouped[dateKey][clientId], item => extractDateOnly(item.process.date));
  });
});

这种结构更方便后续按层级访问分组数据。

内容的提问来源于stack exchange,提问作者Aakriti.G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:15:07