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()
?你说“从最早的日期到最晚的日期”(升序),但是你说“不能让排序函数按降序排序”——你想要的是什么?您当前正在按降序排序,因此我的答案假设您希望升序。