Javascript Array.sort无法正常工作

Javascript Array.sort无法正常工作,javascript,sorting,Javascript,Sorting,我需要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);

我需要
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;
}
var tasks=new Array();
var指数=0;
函数addTask(){
var testask=document.getElementById(“taskinfo”).value;
var td=document.getElementById(“taskdate”).value;
var tempdate=新日期(td);
//添加数组并从tempdate和testask填充
//从2d javascript数组生成html表
任务[索引]={
日期:tempdate,
任务:提问,
};  
索引++
sort(函数(a,b){返回新日期(b.Date).getTime()-新日期(a.Date).getTime()});
var tablecode=“”+
""+
“日期”+
“任务”+
"";
对于(变量i=0;i

我尝试了许多不同的语法变体,但无法让
sort
函数按降序排序

您正在从
b.Date
中减去
a.Date
,这与您想要的正好相反

将它们翻转过来(并移除不必要的
newdate()
wrapper,尽管它们实际上没有破坏任何东西),您将得到正确的排序:

var tasks=[],
指数=0;
函数addTask(){
var testask=document.getElementById(“taskinfo”).value;
var td=document.getElementById(“taskdate”).value;
var tempdate=新日期(td);
任务[索引]={
日期:tempdate,
任务:提问,
};
索引++
任务.排序(函数(a,b){
返回a.Date.getTime()-b.Date.getTime()
});
var tablecode=“”+
"" +
“日期”+
“任务”+
"";
对于(变量i=0;i
任务:

日期:

添加
因为日期表示为

自1970年1月1日UTC以来的毫秒数
()

您要查找的排序顺序是升序而不是降序。 另外,正如@birdspider已经评论的那样,创建新的日期对象和调用getTime()方法是没有用的。它们是可比的

要总结以上几点,请尝试使用以下排序功能:

function sortDatesAsc(tempdateA, tempdateB) {
    return tempdateA - tempdateB < 0 ? -1 : (tempdateA > tempdateB ? 1 : 0);
}

tasks.sort(sortDatesAsc);
函数sortDatesAsc(tempdateA,tempdateB){
返回tempdateA-tempdateB<0-1:(tempdateA>tempdateB-1:0);
}
tasks.sort(sortDatesAsc);

那么
addTask
函数是如何运行的呢?既然你已经有了
Date
s为什么
newdate(b.Date).getTime()
?你说“从最早的日期到最晚的日期”(升序),但是你说“不能让排序函数按降序排序”——你想要的是什么?您当前正在按降序排序,因此我的答案假设您希望升序。