2014-07-03 423 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。更新。 –

相關問題