[英]How can i fix the method sort to work properly for my task?
我试图按升序对日期进行排序,但排序不正确。
我尝试了几种不同的方法来做到这一点。 但是它仍然存在相同的问题。
const arr = [
{ date: "01.01.2017", dayOfWeek: "Tuesday" },
{ date: "01.01.2016", dayOfWeek: "Saturday" },
{ date: "01.01.2002", dayOfWeek: "Wednesday" },
{ date: "01.01.2003", dayOfWeek: "Wednesday" }
];
const sort = arr
.sort((a, b) =>
new Date(a.date).getTime > new Date(b.date).getTime ? 1 : -1
)
.map(function(m) {
console.log(m.date, m.dayOfWeek);
});
我的期望:
2002年1月1日,星期三
2003/01/01星期三
16 01.01.2016星期六
16 01.01.2017星期二
但是我得到的输出是这样的:
2003/01/01星期三
2002年1月1日,星期三
16 01.01.2016星期六
16 01.01.2017星期二
您的代码几乎正确; 您没有调用new Date
getTime
函数。
注意:对数字和日期进行排序的最佳方法是使用减法。
注意2:将console.log
与Array.map
一起Array.map
将以undefined
数组结尾。
const arr = [ { date: "01.01.2017", dayOfWeek: "Tuesday" }, { date: "01.01.2016", dayOfWeek: "Saturday" }, { date: "01.01.2002", dayOfWeek: "Wednesday" }, { date: "01.01.2003", dayOfWeek: "Wednesday" } ].sort( (a, b) => new Date(a.date).getTime() - new Date(b.date).getTime() ).forEach(m => { console.log(m.date, m.dayOfWeek); });
getTime
是一个函数,您需要执行它才能实际比较值:
new Date(a.date).getTime() > new Date(b.date).getTime()? 1 :-1
您也可以不使用getTime()
尝试一下,因为两者均为Date类型,因此可以直接进行比较。
const sort = arr
.sort( (a, b) =>
new Date(a.date) > new Date(b.date) ? 1 : -1
)
.map(function(m) {
console.log(m.date, m.dayOfWeek);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.