我有一个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仍然没有排序。我做错了什么?
谢谢!
答案 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;
});