繁体   English   中英

如何解决方法排序问题,使其适合我的任务?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM