2016-12-03 2 views
-1

У меня есть массив объектов, подобных ...Сортировка массива объектов на основе даты

[ 
    { 
    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" 
    } 
] 

мне нужно отсортировать этот список, основанный на самых поздних сроках.

На основе подобных проблем, которые я видел, это мой код для решения, массив передается в качестве аргумента records ...

function sortRecords (records) { 

    var sorted = records.sort(function(a, b){ 
    return new Date(a.date) - new Date(b.date); 
    }); 

    return sorted; 

} 

Может кто-нибудь посоветовать, почему это не работает? Я просто возвращаю тот же несортированный массив ....

ответ

3

Это потому, что ваша дата Строка не может быть проанализирована как действительная дата, вам нужно будет перестроить строку, которую вы передаете, до new Date(). Например, следующий будет производить оформленной дата:

function rearrangeDate(dateString) { 
    var r = dateString.split('/'); 
    return r[1] + "/" + r[0] + "/" + r[2]; 
} 

который затем можно использовать

function sortRecords (records) { 

    var sorted = records.sort(function(a, b){ 
    return new Date(rearrangeDate(a.date)) - new Date(rearrangeDate(b.date)); 
    }); 

    return sorted; 

} 
+1

просто отсутствует '+' в CONCAT строки в вашей функции –

+0

@AlbertoCentelles спасибо, отредактировал ответ – baao

2

попробовать это

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);

Производит ниже выхода: enter image description here

+0

большое спасибо :) Хотя я получил это, работая в консоли, поскольку он не работал в моем коде. Кажется, у меня проблема с обработкой данных из асинхронного вызова на моем сервере, массив объектов возвращается без запятых между парами значений ключей объектов. Я попытаюсь исправить это, и тогда это должно решить мою проблему сортировки. –

0

вы можете также отсортировать дату на основе год-месяц-день путем изменения тока день-месяц-год:

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);

Смежные вопросы