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

JavaScript合并PHP返回数组后按created_at字段排序结果不符合预期

问题根因

你遇到的排序异常和数组拆分无关,本质是你的排序逻辑没有生效:

  • created_at是DD/MM/YYYY格式的字符串,直接用-运算符计算时,字符串无法被隐式转换为合法数字,最终返回NaN
  • JS的Array.sort()方法如果回调函数返回NaN,不会调整两个对比元素的原有相对顺序,因此数组顺序和你先后push两个数组的顺序完全一致,才会出现第一个数组元素永远排在第二个数组元素前面的现象。

修正代码

排序前先将created_at字符串按格式拆解为合法的日期对象,再用时间戳比较即可:

// 数组合并逻辑不需要修改
history.push(...response.data[0]);
history.push(...response.data[1]);

history.sort((a, b) => {
  // 拆解 DD/MM/YYYY 格式的日期,注意JS月份从0开始计数
  const [aDay, aMonth, aYear] = a.created_at.split('/').map(Number);
  const aTimestamp = new Date(aYear, aMonth - 1, aDay).getTime();

  const [bDay, bMonth, bYear] = b.created_at.split('/').map(Number);
  const bTimestamp = new Date(bYear, bMonth - 1, bDay).getTime();

  // 按日期升序排列,如需降序改为 return bTimestamp - aTimestamp
  return aTimestamp - bTimestamp;
});

优化建议

如果可以调整后端返回逻辑,建议让Laravel直接返回created_at的ISO标准日期字符串(如2021-09-08T00:00:00Z)或Unix时间戳,前端可以直接比较,无需额外做日期格式解析。


内容的提问来源于stack exchange,提问作者Ali Gökmen Kudaş

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:00:04