我有一个对象数组,如下所示:
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);
实际上日期解析没有正确进行 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("-"))));
你的排序方式是正确的,只需更改 cars 数组中的日期格式,使其为 MM:DD:YYYY 或 YYYY:MM:DD 就可以了,因为这些是日期解析接受的格式。
const cloneCars = [...cars]
const dateSort = (a, b) => {
const dateA = new Date(a.initialRegistration)
const dateB = new Date(b.initialRegistration)
if (dateA > dateB) return 1;
if (dateA < dateB) return -1;
return 0
}
const sortedDate = cloneCars.sort(dateSort)
console.log(sortedDate)