0

我正在尝试按升序对日期进行排序,但排序不太正确。

我尝试了几种不同的方法来做到这一点。但它一直有同样的问题。

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 星期三

16 01.01.2016 星期六

16 01.01.2017 星期二

但我得到的输出是这样的:

01.01.2003 星期三

01.01.2002 星期三

16 01.01.2016 星期六

16 01.01.2017 星期二

4

3 回答 3

1

您的代码几乎是正确的;你没有调用getTime.new Date

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

注意 2:使用console.logwithArray.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);
});

于 2019-07-11T17:05:30.907 回答
0

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

new Date(a.date).getTime() > new Date(b.date).getTime()? 1 :-1

于 2019-07-11T16:41:08.290 回答
0

您也可以不尝试,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);
    });
于 2019-07-11T16:47:59.537 回答