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

JavaScript按date属性排序对象数组结果异常的解决方法

问题根因

Array.sort()的比较函数要求返回数字类型作为排序依据,规则是:

  • 返回值 < 0:a 排在 b 前面
  • 返回值 = 0:a 和 b 相对位置保持不变
  • 返回值 > 0:b 排在 a 前面

你写的比较逻辑返回的是>运算的布尔结果,布尔值隐式转数字只有0(false)和1(true)两种,永远不会产出小于0的返回值,无法覆盖双向比较的场景,排序逻辑自然失效,出现顺序错乱。

修复代码

你需要的是按日期从新到旧降序排列,把日期转成毫秒时间戳做数值减法即可:

const sortDate = arrDate.sort(function(a, b) {
  // 转时间戳做数值比较,降序用靠后的日期时间戳减靠前的
  return new Date(b.birthDate).getTime() - new Date(a.birthDate).getTime();
});

如果后续需要改成从旧到新升序,调换a、b位置即可:return new Date(a.birthDate).getTime() - new Date(b.birthDate).getTime()

补充提示

sort()是原地修改方法,会直接改动原始arrDate数组,如果要保留原数组顺序,先浅拷贝再排序:

// 用展开运算符做浅拷贝后再排序,不影响原数组
const sortDate = [...arrDate].sort(function(a, b) {
  return new Date(b.birthDate).getTime() - new Date(a.birthDate).getTime();
});

你的数据里birthDate是标准ISO 8601格式,new Date()可以稳定解析,不需要额外做字符串格式处理,直接转时间戳比较就能得到正确排序结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:32:23