2016-12-05 189 views
3

給出下列對象數組,我需要按日期字段升序對它們進行排序。按日期排列具有日期字段的對象數組

var myArray = [ 
    { 
    name: "Joe Blow", 
    date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)" 
    }, 
    { 
    name: "Sam Snead", 
    date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)" 
    }, 
    { 
    name: "John Smith", 
    date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)" 
    } 
]; 

所以在這個例子中,最終的結果是John Smith,Sam Snead和Joe Blow。

我想使用lodash的_.sortBy(),但我不能讓任何排序發生,無論我怎麼嘗試使用它:

_.sortBy(myArray, function(dateObj) { 
    return dateObj.date; 
}); 

_.sortBy(myArray, 'date'); 

做什麼,我需要改變讓我的數組正確排序?我也有Moment.js,所以我可以使用它來格式化日期字符串(如果需要的話)。我嘗試使用.unix()轉換日期屬性,但這沒有什麼區別。

謝謝。

+0

那些是日期對象或日期字符串? – andlrc

+0

標準的Javascript日期字符串。正如我所說,如果需要,我可以先用Moment將它們轉換爲另一種格式,但轉換爲unix似乎不起作用,並且這似乎是最簡單的排序格式。 – wonder95

+0

值是日期還是字符串? – Dekel

回答

14

你並不真的需要lodash。只需使用JavaScript的Array.prototype.sort方法即可。

在您可以比較它們之前,您需要從日期字符串中創建Date對象。

var myArray = [{ 
 
    name: "Joe Blow", 
 
    date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)" 
 
}, { 
 
    name: "Sam Snead", 
 
    date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)" 
 
}, { 
 
    name: "John Smith", 
 
    date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)" 
 
}]; 
 

 
myArray.sort(function compare(a, b) { 
 
    var dateA = new Date(a.date); 
 
    var dateB = new Date(b.date); 
 
    return dateA - dateB; 
 
}); 
 

 
console.log(myArray);

+0

它具有很好的瀏覽器支持。自從ECMAScript 3以來它一直處於規範中,這意味着它適用於所有瀏覽器。 (甚至IE7) –

+2

由於OP有moment.js,所以它應該用於解析日期,而不是內置日期。 – RobG

2

您的日期值是字符串,因此您需要使用構造函數new Date()將它們更改爲javascript對象。這樣您可以對它們進行分類(使用_.sortBy)。

var myArray = [ 
 
    { 
 
    name: "Joe Blow", 
 
    date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)" 
 
    }, 
 
    { 
 
    name: "Sam Snead", 
 
    date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)" 
 
    }, 
 
    { 
 
    name: "John Smith", 
 
    date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)" 
 
    } 
 
]; 
 

 
myArray = _.sortBy(myArray, function(dateObj) { 
 
    return new Date(dateObj.date); 
 
}); 
 

 
console.log(myArray)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>

1

下面是使用標準JavaScript由兩個值轉換爲日期對象和比較它們的值的溶液中。

myArray.sort((d1, d2) => new Date(d1.date).getTime() - new Date(d2.date).getTime()); 

一個完整的片段:

var myArray = [ 
 
    { 
 
    name: "Joe Blow", 
 
    date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)" 
 
    }, 
 
    { 
 
    name: "Sam Snead", 
 
    date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)" 
 
    }, 
 
    { 
 
    name: "John Smith", 
 
    date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)" 
 
    } 
 
]; 
 

 
myArray.sort((d1, d2) => new Date(d1.date).getTime() - new Date(d2.date).getTime()); 
 

 
console.log(myArray);