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

最佳方法:将日期数组转换为带计数的唯一对象数组

将日期数组转换为含计数的唯一对象数组的最优实现

核心思路

先用**reduce**统计每个日期的出现次数(时间复杂度O(n)),再将统计结果转换为目标格式的数组,整体仅需两次线性遍历,是效率最优的实现方式之一。

示例实现(JavaScript)

原始数组

const dates = ['07Sep', '09Sep', '14Sep', '05Sep', '12Sep', '06Sep', '10Sep', '14Sep', '08Sep', '10Sep', '04Sep', '05Sep', '07Sep', '08Sep', '13Sep', '12Sep', '05Sep', '05Sep', '06Sep', '10Sep', '06Sep', '13Sep', '05Sep', '06Sep', '05Sep', '04Sep', '12Sep', '05Sep', '11Sep', '10Sep', '11Sep', '06Sep', '04Sep', '10Sep'];

实现代码

// 1. 统计每个日期的出现次数(支持统一大小写)
const countMap = dates.reduce((acc, date) => {
  const normalizedDate = date.toUpperCase(); // 统一转大写,避免大小写差异导致的重复统计
  acc[normalizedDate] = (acc[normalizedDate] || 0) + 1;
  return acc;
}, {});

// 2. 转换为目标格式的数组
const result = Object.entries(countMap).map(([date, count]) => ({ [date]: count }));

console.log(result);

输出结果示例

[
  { '07SEP': 2 },
  { '09SEP': 1 },
  { '14SEP': 2 },
  { '05SEP': 7 },
  { '12SEP': 3 },
  { '06SEP': 5 },
  { '10SEP': 5 },
  { '08SEP': 2 },
  { '04SEP': 3 },
  { '13SEP': 2 },
  { '11SEP': 2 }
]

说明

  • 如果不需要统一日期大小写,可直接移除date.toUpperCase()步骤,使用原始字符串统计
  • 整体时间复杂度为O(n),仅需遍历数组两次,在大数据量场景下性能表现最优

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:25:30