[英]Sorting array of objects based on date
I have an array of objects similar to... 我有一系列类似于...的对象
[
{
date: "26/11/2016"
hourlyRate: 50
hoursWorked: 10
name: "Mr G"
natInsNumber: "GG845893G"
},
{
date: "14/10/2016"
hourlyRate: 50
hoursWorked: 10
name: "Mr A"
natInsNumber: "GG845893G"
},
{
date: "11/09/2016"
hourlyRate: 50
hoursWorked: 10
name: "Mr H"
natInsNumber: "GG845893G"
},
{
date: "26/10/2016"
hourlyRate: 50
hoursWorked: 10
name: "Mr L"
natInsNumber: "GG845893G"
}
]
I need to sort this list based on the most recent dates. 我需要根据最近的日期对该列表进行排序。
Based on similar problems I have seen this is my code for the solution, the array is being passed in as the records
argument... 基于类似的问题,我已经看到这是解决方案的代码,该数组作为
records
参数传入。
function sortRecords (records) {
var sorted = records.sort(function(a, b){
return new Date(a.date) - new Date(b.date);
});
return sorted;
}
Can anyone advise on why this is not working? 谁能建议为什么这不起作用? I am just getting back the same unsorted array....
我只是找回相同的未排序数组。
That's because your date String can't be parsed as a valid date, you'd need to rearrange the string you are passing to new Date()
. 这是因为您的日期String无法解析为有效日期,因此您需要重新排列传递给
new Date()
的字符串。 For example the following would produce a parsable date: 例如,以下将产生可分析的日期:
function rearrangeDate(dateString) {
var r = dateString.split('/');
return r[1] + "/" + r[0] + "/" + r[2];
}
which you then can use 然后您可以使用
function sortRecords (records) {
var sorted = records.sort(function(a, b){
return new Date(rearrangeDate(a.date)) - new Date(rearrangeDate(b.date));
});
return sorted;
}
try this 尝试这个
let sorted =
[{
date: "26/11/2016",
hourlyRate: 50,
hoursWorked: 10,
name: "Mr G",
natInsNumber: "GG845893G"
},
{
date: "14/10/2016",
hourlyRate: 50,
hoursWorked: 10,
name: "Mr A",
natInsNumber: "GG845893G"
},
{
date: "11/09/2016",
hourlyRate: 50,
hoursWorked: 10,
name: "Mr H",
natInsNumber: "GG845893G"
},
{
date: "26/10/2016",
hourlyRate: 50,
hoursWorked: 10,
name: "Mr L",
natInsNumber: "GG845893G"
}
];
function CreateDate(dateString) {
var arr = dateString.split('/');
return new Date(arr[2] , arr[1], arr[0]);
}
function sortRecords(records) {
var sorted = records.sort(function (a, b) {
return CreateDate(a.date) > CreateDate(b.date);
});
console.log(sorted);
}
sortRecords(sorted);
you could also sort date on the basis of the year-month-day by reversing the current day-month-year : 您还可以通过反转当前的day-month-year ,根据年-月-日对日期进行排序:
var list = [ { date: "26/11/2016", hourlyRate: 50, hoursWorked: 10, name: "Mr G", natInsNumber: "GG845893G" }, { date: "30/10/2016", hourlyRate: 50, hoursWorked: 10, name: "Mr A", natInsNumber: "GG845893G" }, { date: "11/09/2016", hourlyRate: 50, hoursWorked: 10, name: "Mr H", natInsNumber: "GG845893G" }, { date: "26/10/2016", hourlyRate: 50, hoursWorked: 10, name: "Mr L", natInsNumber: "GG845893G" } ] var result = list.sort((a,b) => a.date.split("/").reverse().join("") - b.date.split("/").reverse().join("")); console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.