2017-03-01 35 views
4

我有一個反應組件,呈現過去發生的「會議」列表。按日期排序的反應

我試圖讓它對每個過去的會議進行排序,以便過去最近發生的那些會在頂部。

我正在檢查會議是否發生在過去,如果是,顯示它。 (這是工作的罰款)

這是我的渲染方法:

render(){ 
let past_meetings = this.store.meetings.map((meeting, i) => { 
    if (meeting.scheduled_for < moment.utc(new Date()).format()){ 
    return (<MeetingItem meeting={meeting} key={`meeting-${meeting.id}`} />) 
    } else { 
    return ; 
    } 
}) 

return(
    <div className=""> 
    <div className=""> 
     <h3 className="">Past Meetings</h3> 
     <div className="" > 
     {past_meetings} 
     </div> 
    </div> 

    </div> 
) 
} 

目前的會議顯示爲:如果是在過去,在頂部顯示進一步發生。

我的目標是讓它表現如下:如果它最近發生了,則顯示在最上面。

嘗試過這樣的事情與lodash的.sortBy():

let sorted_meetings = _.sortBy(past_meetings, function(e){ 
return - (new Date(e.scheduled_for)) 
} 

沒有成功。

meeting.scheduled_for 
// returns 2017-03-03T03:33:00.000Z 

試圖比較scheduled_for的但沒有太多運氣。

這可以用_ ???完成或者其他方式?

+0

你使用的是什麼版本loadash會議排序? – Nicholas

+0

@Nicholas^4.17.4 – JessiAbrams

+0

您需要降序排序。 我不知道你正在使用什麼版本的Loadash。您可以嘗試接受答案中的選項。 [此鏈接。](http://stackoverflow.com/questions/22928841/lodash-multi-column-sortby-descending/29082994#29082994) – Nicholas

回答

4

您可以使用sort()reverse()降序排列

var sorted_meetings = meetings.sort((a,b) => { 
    return new Date(a.scheduled_for).getTime() - 
     new Date(b.scheduled_for).getTime() 
}).reverse(); 
+0

謝謝,這是有幫助的。我現在遇到的問題實際上是在render方法的返回中使用這個,因爲「sorted_meetings」不會在那裏定義。 – JessiAbrams

+1

@JessiAbrams如果你打開一個新的問題,我會看看 – FuzzyTree