按属性值对JavaScript对象数组排序
我有一个JavaScript对象数组。我的数组定义如下:按属性值对JavaScript对象数组排序,javascript,arrays,sorting,lodash,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, cr
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值按升序对结果进行排序。为了做到这一点,我尝试使用洛达斯。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);
});
//按createdOn排序
myObjects.sort(函数(a,b){
var date1=新日期(a['createdon']);
var date2=新日期(b['createdon']);
返回日期1<日期2;
});
_.forEach(对象、函数(结果){
控制台日志(结果);
});
不幸的是,在我运行此函数后,MyObject仍然没有排序。我做错了什么
谢谢大家! 问题在于
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;
});
我刚看过洛达斯医生,也许还有你 试试看:
编辑:正如Cookie Monster指出的,重要的是您的
createdon
字段是日期,而不是字符串代码>为什么不干脆返回日期1-date2代码>?我假设sort需要-1、0或1Thanks@RocketHazmat。已更新。它只需要负数/正数或0
。但是相同的两个项目之间的返回结果应该总是相同的。这不需要是date1.getTime()
那么您是在比较自epoch以来的毫秒数吗?您是在按字符串值排序,这可能会失败。您需要首先转换为日期。现在您正在更改数据结构。你应该提供一个适合实际情况的解决方案。我明白你的意思,但考虑到问题的上下文信息,我认为这是OP的一个潜在解决方案。不过,谢谢你,我会记住这一点。如果日期的格式像YYMMDD,其中按时间顺序排序=我的字符串排序,它将作为字符串工作,我需要desc
order,所以我使用了.orderBy(arrOfObjs,'sort\u key','desc')
。这个方法非常强大,你应该看看上面的文档。
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);
});