2014-07-03 319 views
28

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

这个数组实际上是动态填充的。不过,我需要按照升序创建的值对结果进行排序。要做到这一点,我正在尝试使用lodash。创建的值代表日期。目前,我正在尝试以下操作:

// 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

尝试'return date1 - date2;' –

回答

56

我只是去通过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怪物指出,重要的是您的createdon字段是一个日期,而不是一个字符串。

+1

您正在按字符串值排序,可能会失败。 http://jsfiddle.net/3Wza8/2/您需要先转换为日期。 –

+3

现在你正在改变数据结构。您应该提供适用于所提供的实际情况的解决方案。 –

+1

我明白你的观点,但考虑到问题的背景信息,我认为这是OP的潜在解决方案。不过谢谢,我会记住这一点。 – lcoderre

0

的问题是,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; 
}); 
+1

为什么不只是'return date1 - date2;'? –

+0

我是根据假设排序期望-1,0或1 –

+0

谢谢@RocketHazmat。更新。 –

相关问题