按多个属性(包括日期)对数组进行排序

时间:2020-11-03 21:09:33

标签: javascript arrays typescript

我想按枚举,然后按数字,然后按日期对数组进行排序。当我使用枚举和数字进行处理时,它似乎可以正常工作,但是当我在末尾加上日期时,一切都会变得混乱。

这是我的代码:

enum myType { 
  high,
  medium,
  low
}

myArray.sort((a, b) =>
  myType[a.type] - myType[b.type] ||
  a.classification - b.classification ||
  new Date(a.time) > new Date(b.time)
    ? -1
    : 1
);

但是,这似乎是相反的意思,它按照类型从低到高,从高到低的相反顺序进行排序。我们该如何处理?

更新:日期将像这样传递:2017-07-02T14:59:55.711Z

1 个答案:

答案 0 :(得分:4)

在不知道time样式的情况下,您需要包装三元数以防止读取该三元数的所有表达式。

myArray.sort((a, b) =>
    myType[a.type] - myType[b.type] ||
    a.classification - b.classification ||
    (new Date(a.time) > new Date(b.time)
        ? -1
        : 1)
);

通过使用ISO 8601兼容的字符串,您可以与String#localeCompare进行字符串比较。

myArray.sort((a, b) =>
    myType[a.type] - myType[b.type] ||
    a.classification - b.classification ||
    a.time.localeCompare(b.time)
);