简体   繁体   English

根据日期对对象数组进行排序

[英]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);

Produces below output: 产生以下输出: 在此处输入图片说明

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.

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