簡體   English   中英

Array.sort無法正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM