在 React JS 中按日期对数组进行排序

IT技术 javascript reactjs
2021-05-01 08:08:09

我有一个对象数组,如下所示:

let cars = [
    {"id":20,"mileage":41300,"make":"Golf", initialRegistration:"09/02/2010"}, 
    {"id":21,"mileage":51300,"make":"Passat", initialRegistration:"06/04/2012"},
    {"id":22,"mileage":61300,"make":"Audi", initialRegistration:"02/01/2018"},
    {"id":23,"mileage":20300,"make":"Touran", initialRegistration:"17/09/2013"},
    {"id":24,"mileage":10300,"make":"Polo", initialRegistration:"26/07/2014"}
];

我想按initialRegistration.

我尝试这样做:

let sortedCars = cars.sort((a, b) => Date.parse(a.initialRegistration) - Date.parse(b.initialRegistration));

let sortedCars1 = cars.sort((a, b) => new Date(a.initialRegistration) - new Date(b.initialRegistration));

let sortedCars2 = cars.sort((a, b) => new Date(a.initialRegistration).getTime() - new Date(b.initialRegistration).getTime());

但是这些尝试都没有奏效。我得到的结果是:

Golf - 09/02/2010
Passat - 06/04/2012
Audi - 02/01/2018
Touran - 17/09/2013
Polo - 26/07/2014

这里是小提琴。

3个回答

使用Date构造函数并执行类似的操作。

let sortedCars1 = cars.sort((a, b) => new Date(...a.initialRegistration.split('/').reverse()) - new Date(...b.initialRegistration.split('/').reverse()));


或者String#localeCompare在反转日期字符串后通过字符串比较使用

let sortedCars1 = cars.sort((a, b) =>
  a.initialRegistration.split('/').reverse().join().localeCompare(b.initialRegistration.split('/').reverse().join())); 

实际上,日期解析没有正确发生 new Date("09/02/2010") 将不起作用,并且将假定日期为 2nd sep 2010 因此它需要作为“2010-02-09”传递 yyyy-mm-dd

  let sortedCars = cars.sort((a, b) => Date.parse(new Date(a.initialRegistration.split("/").reverse().join("-"))) - Date.parse(new Date(b.initialRegistration.split("/").reverse().join("-"))));

看到这个http://jsfiddle.net/jwm6k66c/1590/

您的排序方式是正确的,只需更改汽车数组中的日期格式,使其成为 MM:DD:YYYY 或 YYYY:MM:DD 即可,因为这些是 Date 解析接受的格式。