Сортировка массива объектов JavaScript по значению свойства
У меня есть массив объектов JavaScript. Мой массив определяется следующим образом:
var myObjects = [
{ id: '1', username: 'bill.jones', active: true, createdon: '03/29/2014' },
{ id: '2', username: 'woohoo', active: true, createdon: '03/28/2014' },
{ id: '3', username: 'someuser', active: true, createdon: '03/30/2014' }
];
Этот массив фактически динамически заполнен. Тем не менее, мне нужно отсортировать результаты по значению createdon в порядке возрастания. Для этого я пытаюсь использовать lodash. Значение createdon представляет собой дату. В настоящее время я пытаюсь сделать следующее:
// ORDER BY createdOn
myObjects.sort(function (a, b) {
var date1 = new Date(a['createdon']);
var date2 = new Date(b['createdon']);
return date1 < date2;
});
_.forEach(myObjects, function(result) {
console.log(result);
});
К сожалению, myObjects по-прежнему не сортируется после запуска этой функции. Что я делаю неправильно?
Спасибо!
Ответы
Ответ 1
Я только что прошел через lodash doc, и, возможно, вы могли попробовать sortBy
Попробуйте: http://jsfiddle.net/3Wza8/
var myObjects = [
{ id: '1', username: 'bill.jones', active: true, createdon: new Date('03/29/2014') },
{ id: '2', username: 'woohoo', active: true, createdon: new Date('03/28/2014') },
{ id: '3', username: 'someuser', active: true, createdon: new Date('03/30/2014') }
];
myObjects = _.sortBy(myObjects, 'createdon');
_.forEach(myObjects, function (result) {
console.log(result);
});
EDIT: как отметил Cookie Monster, важно, чтобы ваше поле createdon
было Date, а не строкой.
Ответ 2
Проблема заключается в том, что sort
ожидает функцию, которая возвращает -1, 0 или 1. Ваша функция возвращает 0 и 1.
Это небольшое изменение должно исправить это:
myObjects.sort(function (a, b) {
var date1 = new Date(a['createdon']);
var date2 = new Date(b['createdon']);
return date1 - date2;
});