Подтвердить что ты не робот

Сортировка массива объектов 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 по-прежнему не сортируется после запуска этой функции. Что я делаю неправильно?

Спасибо!

4b9b3361

Ответ 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;
});