繁体   English   中英

在React JS中按日期排序数组

[英]Sort array by dates in React JS

我有一个对象数组如下:

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

这是小提琴。

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

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

 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" }]; let sortedCars1 = cars.sort((a, b) => new Date(...a.initialRegistration.split('/').reverse()) - new Date(...b.initialRegistration.split('/').reverse())); console.log(sortedCars1); 


或者在反转日期字符串后使用String#localeCompare进行字符串比较。

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

 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" }]; let sortedCars1 = cars.sort((a, b) => a.initialRegistration.split('/').reverse().join().localeCompare(b.initialRegistration.split('/').reverse().join())); console.log(sortedCars1); 

实际上日期解析没有正确发生新的日期(“09/02/2010”)将无法工作,并将假设日期为2010年第2季度因此它需要传递为“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/

您的排序方式是正确的,只需更改cars数组中的日期格式,使其为MM:DD:YYYY或YYYY:MM:DD它将起作用,因为这些是Date解析接受的格式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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