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

JavaScript中如何获取数组内各分类的最新日期

问题描述

我有一个包含Customer对象的数组,每个对象包含ID、category和date属性,同一分类下可能存在不同的日期。原始数据示例:

Customer 1 | qualityCheck | 12.03.2022
Customer 1 | priceCheck   | 05.07.2021
Customer 1 | customerCheck| 25.10.2022
Customer 1 | qualityCheck | 19.09.2020
Customer 1 | priceCheck   | 15.05.2022

需要获取每个分类的最新日期,返回包含目标项的新列表,期望结果如下:

Customer 1 | qualityCheck | 12.03.2022
Customer 1 | customerCheck| 25.10.2022
Customer 1 | priceCheck   | 15.05.2022

数组条目可能有100条甚至仅1条,该如何实现?

解决方案

以JavaScript为例,可通过分组比较的方式实现,步骤如下:

  1. 先将dd.mm.yyyy格式的日期字符串转换为可直接比较的Date对象,避免字符串比较的误差;
  2. 用临时对象按ID+category的组合作为唯一键,存储每个分组下的最新日期对象;
  3. 遍历原始数组,逐一比较并更新临时对象中的最新项;
  4. 将临时对象的值转换为数组,得到最终结果。

完整代码示例:

// 原始Customer数组
const customers = [
  { ID: 'Customer 1', category: 'qualityCheck', date: '12.03.2022' },
  { ID: 'Customer 1', category: 'priceCheck', date: '05.07.2021' },
  { ID: 'Customer 1', category: 'customerCheck', date: '25.10.2022' },
  { ID: 'Customer 1', category: 'qualityCheck', date: '19.09.2020' },
  { ID: 'Customer 1', category: 'priceCheck', date: '15.05.2022' }
];

// 转换dd.mm.yyyy为Date对象的辅助函数
function parseDate(dateStr) {
  const [day, month, year] = dateStr.split('.');
  return new Date(year, month - 1, day); // 月份在Date中是0基索引,需减1
}

// 分组存储最新项
const latestEntries = {};

customers.forEach(item => {
  // 生成唯一键:区分不同客户+不同分类
  const key = `${item.ID}-${item.category}`;
  const currentDate = parseDate(item.date);
  
  // 如果当前分组不存在,或当前项日期更新,则替换
  if (!latestEntries[key] || currentDate > parseDate(latestEntries[key].date)) {
    latestEntries[key] = { ...item }; // 浅拷贝原对象,避免引用修改
  }
});

// 转换为结果数组
const result = Object.values(latestEntries);

// 输出结果
console.log(result);

说明

  • 该逻辑支持任意数量的数组条目(包括1条);
  • 如果存在多个不同ID的客户,也能正确按「客户+分类」分组,保留每个分组的最新日期项;
  • 日期转换确保了比较的准确性,避免了直接比较字符串导致的错误(比如01.12.2023和10.01.2022的字符串比较结果不符合实际日期顺序)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:40:33