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

如何过滤二维数组以保留每个ID对应的最新日期元素

解决方案:过滤数组保留每个ID的最新日期元素

没问题,咱们可以分两步来实现这个需求:先找出每个ID对应的最新日期,再基于这个日期筛选出符合条件的元素。下面是完整的代码实现:

var arr = [[1, "3/20/2018", "A"], [1, "3/20/2018", "B"], [1, "4/20/2018", "A"], [1, "4/20/2018", "B"], [2, "1/30/2018", "A"], [2, "1/30/2018", "B"], [2, "3/30/2018", "A"], [2, "3/30/2018", "B"]];

// 第一步:创建一个对象,存储每个ID对应的最新日期
const latestDates = {};
arr.forEach(item => {
  const id = item[0];
  const date = new Date(item[1]);
  // 如果当前ID还没记录,或者当前日期比已记录的更新,就更新
  if (!latestDates[id] || date > new Date(latestDates[id])) {
    latestDates[id] = item[1];
  }
});

// 第二步:筛选出每个ID下日期等于最新日期的元素
const result = arr.filter(item => {
  return item[1] === latestDates[item[0]];
});

console.log(result);
// 输出:[[1, "4/20/2018", "A"], [1, "4/20/2018", "B"], [2, "3/30/2018", "A"], [2, "3/30/2018", "B"]]

代码解释:

  • 第一步构建最新日期映射:我们遍历原数组,把每个元素的ID作为键,日期作为值。每次遇到同一个ID的元素时,就将当前日期和已存储的日期转换成Date对象比较大小,保留更新的那个日期。这样latestDates里就存了每个ID对应的最新日期字符串。
  • 第二步筛选元素:再次遍历原数组,只保留那些元素的日期和对应ID在latestDates里存储的最新日期完全匹配的项,这样就得到了我们想要的结果。

这种方法的优势是只需要遍历数组两次,时间复杂度是O(n),效率比较高,而且逻辑清晰易懂。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:33:46