按属性值对JavaScript对象的数组进行排序

时间:2014-07-03 18:26:26

标签: javascript arrays sorting lodash

我有一个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' }
];

此数组实际上是动态填充的。不过,我需要按创建的值按升序对结果进行排序。要做到这一点,我试图使用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仍然没有排序。我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:71)

我刚刚通过lodash doc,也许你could try 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);
});

编辑:正如Cookie Monster指出的那样,重要的是你的createdon字段是日期,而不是字符串。

答案 1 :(得分:1)

问题是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;
});