[英]Array.sort not working correctly
我需要sort
函數對最早的日期到最晚的日期進行排序。 如何在任務表中解決此問題?
var tasks = new Array();
var index = 0;
function addTask() {
var temptask = document.getElementById("taskinfo").value;
var td = document.getElementById("taskdate").value;
var tempdate = new Date(td);
//add array and populate from tempdate and temptask
//generate html table from 2d javascript array
tasks[index] = {
Date: tempdate,
Task: temptask,
};
index++
tasks.sort(function(a,b){return new Date(b.Date).getTime() - new Date(a.Date).getTime()});
var tablecode = "<table class = 'tasktable'>" +
"<tr>"+
"<th>Date</th>"+
"<th>Task</th>"+
"</tr>";
for (var i = 0; i < tasks.length; i++) {
tablecode = tablecode + "<tr>" +
"<td>" + tasks[i]["Date"].toDateString() + " </td>" +
"<td>" + tasks[i]["Task"] + " </td>" +
"</tr>";
}
tablecode = tablecode + "</table>";
document.getElementById("bottomright").innerHTML = tablecode;
return false;
}
我嘗試了許多不同的語法變體,但無法獲得sort
功能以降序排序
您要從b.Date
減去a.Date
,恰好與您想要的相反。
翻轉它們(並刪除不必要的new Date()
包裝器,盡管它們實際上並沒有破壞任何東西),您將獲得正確的排序:
var tasks = [], index = 0; function addTask() { var temptask = document.getElementById("taskinfo").value; var td = document.getElementById("taskdate").value; var tempdate = new Date(td); tasks[index] = { Date: tempdate, Task: temptask, }; index++ tasks.sort(function(a, b) { return a.Date.getTime() - b.Date.getTime() }); var tablecode = "<table class='tasktable'>" + "<tr>" + "<th>Date</th>" + "<th>Task</th>" + "</tr>"; for (var i = 0; i < tasks.length; i++) { tablecode += "<tr>" + "<td>" + tasks[i]["Date"].toDateString() + " </td>" + "<td>" + tasks[i]["Task"] + " </td>" + "</tr>"; } tablecode += "</table>"; document.getElementById("bottomright").innerHTML = tablecode; return false; } document.getElementById('add').addEventListener('click', addTask);
<p>Task: <input type="text" id="taskinfo" /></p> <p>Date: <input type="date" id="taskdate" /></p> <button id="add">add</button> <div id="bottomright"></div>
由於日期表示為
自1970年1月1日UTC以來的毫秒數
( https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date )
您要查找的排序順序是升序而不是降序。 另外,正如@birdspider所評論的那樣,沒有使用創建新的Date對象和調用getTime()方法的用法。 它們具有可比性。
總結以上幾點,請嘗試使用以下排序功能:
function sortDatesAsc(tempdateA, tempdateB) {
return tempdateA - tempdateB < 0 ? -1 : (tempdateA > tempdateB ? 1 : 0);
}
tasks.sort(sortDatesAsc);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.