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

Array.prototype.sort()在Firefox生效但Chrome无效?求原因解析

问题原因及修复方案

你的排序函数不符合Array.sort()的规范要求,这是导致跨浏览器表现不一致的核心原因。

Array.sort()的比较函数必须返回负数、0或正数:

  • 返回负数:第一个参数应排在第二个参数前面
  • 返回0:两个元素相对位置保持不变
  • 返回正数:第一个参数应排在第二个参数后面

而你当前的代码返回的是布尔值(true/false),虽然浏览器会自动将布尔值转为数字(true对应1,false对应0),但这个逻辑存在严重缺陷:

  • 当new Date(a) < new Date(b)成立时返回1,这会让a排在b之后(和你想要的升序逻辑相反)
  • 其他所有情况都返回0,这会让浏览器的排序算法无法正确判断元素的相对位置。由于Chrome和Firefox采用的排序实现不同,这种不完整的返回值会导致Chrome中排序失效,而Firefox碰巧表现出你预期的结果。

修复后的代码

要实现升序排序(旧日期在前),直接返回两个日期对象的差值(日期对象相减会自动转为时间戳差值):

person_json[0].events.sort(({date:a}, {date:b}) => new Date(a) - new Date(b));

如果需要降序排序(新日期在前),则反转差值:

person_json[0].events.sort(({date:a}, {date:b}) => new Date(b) - new Date(a));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:12:05