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
相关产品推荐
相关产品推荐

