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

JavaScript中如何对以日期为键的Map进行排序?

解决JavaScript Map按日期键排序的问题

嘿,我来帮你搞定这个Map排序的问题!你之前的代码思路方向是对的,但在sort回调函数的参数处理上出了点小问题,咱们一步步来修正。

问题出在哪?

你写的sort(function(key, value) { return new Date(key); })里,key和value其实是[...days_map]数组里的整个键值对元素(也就是[日期字符串, 对应对象]这样的数组),而不是Map的键和值。直接把这个数组传给new Date()肯定得不到正确的日期比较结果,自然排不对序。

正确的实现思路

ES6的Map是有序集合,它会按照元素的插入顺序保存内容。所以我们只需要:

  1. 把Map转换成键值对数组([...days_map]就能做到)
  2. 对这个数组按日期键进行排序
  3. 用排序后的数组重新创建一个新的Map

完整代码示例

// 先还原你的示例Map
const days_map = new Map([
  ['2020-09-29', { foo: 1, bar: 2 }],
  ['2020-09-01', { foo: 3, bar: 4 }],
  ['2020-09-08', { foo: 5, bar: 6 }]
]);

// 按日期升序排序(如果要降序,把new Date(dateA)和new Date(dateB)调换位置)
const sortedDaysMap = new Map(
  [...days_map].sort(([dateA], [dateB]) => new Date(dateA) - new Date(dateB))
);

// 验证排序结果
for (const [key, value] of sortedDaysMap) {
  console.log(key, value);
}
// 输出顺序:
// 2020-09-01 { foo: 3, bar: 4 }
// 2020-09-08 { foo: 5, bar: 6 }
// 2020-09-29 { foo: 1, bar: 2 }

代码解释

  • [...days_map]:将Map展开成一个二维数组,每个元素是[键, 值]的形式
  • sort(([dateA], [dateB]) => ...):用数组解构直接取出每个元素里的日期键,转换成Date对象后相减——日期对象相减会返回时间戳的差值,正数表示dateA比dateB晚,负数则相反,这样就能实现升序排序
  • 最后用排序后的数组创建新Map,就得到了按日期排序的有序Map啦

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:32:41