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

JS中sort方法处理字符串日期排序异常问题求助

日期字符串数组排序问题解决

你的问题出在字符串减法运算的结果是NaN,Array.sort()的比较函数返回NaN时,浏览器不会调整元素顺序,所以原数组保持不变。

为什么数字能正常排序?

数字之间的减法会得到有效的数值(正数、负数或0),sort()根据这个差值判断元素的先后顺序;但字符串做减法会被强制转换为数字,日期字符串转数字会得到NaN,导致排序逻辑失效。

两种可行的解决方案

方案1:利用ISO日期字符串的字典序特性

你的日期是YYYY-MM-DD格式(ISO标准),这种格式的字符串字典序和时间顺序完全一致,直接用localeCompare比较即可:

var dic = [{key: '2022-05-13'}, {key: '2022-05-06'}];
dic.sort(function(a, b) {
  return a.key.localeCompare(b.key);
});
// 输出:[{key: '2022-05-06'}, {key: '2022-05-13'}]

方案2:转换为Date对象后比较

把日期字符串转成Date实例,利用Date对象的数值特性(内部存储为时间戳)做减法:

var dic = [{key: '2022-05-13'}, {key: '2022-05-06'}];
dic.sort(function(a, b) {
  return new Date(a.key) - new Date(b.key);
});
// 输出:[{key: '2022-05-06'}, {key: '2022-05-13'}]

注意事项

如果你的日期格式不是ISO标准(比如MM/DD/YYYY),方案1会失效,必须使用方案2来保证排序逻辑正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:36:28