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

JavaScript数组按日期降序排序失效问题求助

解决数组按日期降序排序失效的问题

看起来你的排序逻辑存在两个可能的问题,我来帮你逐一排查修复:

1. 排序方向搞反了

你当前的sortFunction实际是按升序排列的,和你需要的降序逻辑正好相反。

原代码中的排序逻辑:

function sortFunction(a,b){
  var dateA = new Date(a.date).getTime();
  var dateB = new Date(b.date).getTime();
  return dateA > dateB ? 1 : -1; 
};

这个逻辑会让更早的日期排在前面(升序)。要实现降序(最新日期在前),需要反转返回值:

function sortFunction(a,b){
  var dateA = new Date(a.date).getTime();
  var dateB = new Date(b.date).getTime();
  // 降序:新日期优先级更高,dateA更大时返回-1,让a排在b前面
  return dateA > dateB ? -1 : 1; 
  // 或者更简洁的写法:return dateB - dateA;
};

2. 日期格式兼容性问题

如果你的obj.date是类似DD/MM/YYYY这种非标准格式(从截图里的日期样式来看大概率是这种),原生new Date()可能无法正确解析,导致getTime()返回NaN,排序直接失效。

这种情况下需要手动转换日期格式:

// 自定义日期解析函数,适配DD/MM/YYYY格式
function parseCustomDate(dateStr) {
  const [day, month, year] = dateStr.split('/');
  // 注意:JavaScript的Date月份是从0开始计数的,所以要减1
  return new Date(year, month - 1, day);
}

function sortFunction(a,b){
  var dateA = parseCustomDate(a.date).getTime();
  var dateB = parseCustomDate(b.date).getTime();
  return dateB - dateA; // 降序排序
};

修改后的完整代码示例

function getDetailsForShipmentId() { 
  var strTable="<table id='myTable' border='2'><tr><th>Shipment Number</th><th>Port</th><th>Date</th><th>Time</th><th>Status</th></tr>"; 
  var array=populateShipmentDetails(); 
  // 使用修正后的排序函数
  array.sort(sortFunction); 
  var id=document.getElementById("shipmentId").value; 
  for (let i = 0; i < array.length; i++) { 
    const obj = array[i]; 
    if (obj.shipmentId == id) { 
      strTable+=`<tr><td>${obj.shipmentId}</td><td>${obj.port}</td><td>${obj.date}</td><td>${obj.time}</td><td>${obj.status}</td></tr>`; 
    } 
  } 
  strTable+="</table>"; 
  document.getElementById("result").innerHTML=strTable; 
} 

function sortFunction(a,b){
  // 处理自定义日期格式(适配DD/MM/YYYY)
  const parseDate = (dateStr) => {
    const [day, month, year] = dateStr.split('/');
    return new Date(year, month - 1, day);
  };
  var dateA = parseDate(a.date).getTime();
  var dateB = parseDate(b.date).getTime();
  // 降序排序:最新日期排在最前面
  return dateB - dateA;
};

你可以先测试修改排序方向,如果还是无效,再检查日期格式是否需要手动解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:25:19