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

