Javascript 如何修复排序方法以使其正确地用于我的任务?

Javascript 如何修复排序方法以使其正确地用于我的任务?,javascript,Javascript,我试图按升序对日期进行排序,但排序不太正确 我试过几种不同的方法。但它一直有同样的问题 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 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);
  });
我所期望的是:

01.01.2002星期三

01.01.2003星期三

2016年1月16日星期六

2017年1月16日星期二

但我得到的结果是:

01.01.2003星期三

01.01.2002星期三

2016年1月16日星期六

2016 01.01.2017星期二

getTime是一个函数,您需要执行它来实际比较值:


新建日期a.date.getTime>新建日期b.date.getTime?1:-1

您也可以在不使用getTime的情况下尝试,因为两者都是日期类型,因此可以直接比较

  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);
    });

你的代码几乎正确;您没有调用函数getTime of new Date

注:对数字和日期进行排序的最佳方法是使用减法

注意2:将console.log与Array.map一起使用将得到一个未定义的数组

常数arr=[ {日期:2017年1月1日,星期二}, {日期:2016年1月1日,星期六}, {日期:2002年1月1日,星期三}, {日期:2003年1月1日,星期三} ].分类 a、 b=>new Datea.date.getTime-new Dateb.date.getTime .forEachm=>{ console.logm.date,m.dayOfWeek;
};getTime是一个函数,您需要调用它getTime您的日期字符串的格式不是新日期可以移植解析的格式。请注意这些日期格式,它们是非标准的,因此不能保证由日期构造函数正确解析。您不需要调用getTime。可以直接比较日期对象。如果需要解析非标准格式,可以使用矩.js.Simpler is to subtract,而不是使用trialent.new Datea.Date-new Dateb.Date