2017-04-18 58 views
1

我有一個對象event數組,其中每個事件都有一個開始日期和一個結束日期。爲什麼我的過濾和排序不起作用?

我想通過刪除任何比now舊的事件來過濾事件。然後,我嘗試將我的事件排序爲最近,然後將它們顯示在屏幕上。

我使用下列程序:

constructor(props) { 

    // .. 
    this.props.events = this.filterAndSortEvents(props.events); 
} 

filterAndSortEvents(events: Object) 
{ 
    let Original = events; 
    const now = new Date(); 

    // filter 
    let Filtered = events.map(function(e) { 
     if(e.endDate > Date.now()) 
     { return e } 
    }); 

    // sort 
    let Sorted = Filtered.sort(function(a,b) { 
     return a.startDate > b.startDate ? -1 : a.startDate < b.startDate ? 1 : 0; 
    }); 

    return Sorted; 
} 

但它不工作:

+0

嘗試使用'this.events'設置events屬性到類, this.props.events' –

回答

2

也許你考慮使用Array#filter過濾。

let filtered = events.filter(e => e.endDate > Date.now()); 

你可以使用的時間增量爲排序返回值(原位Array#sort作品。)

filtered.sort((a, b) => b.startDate - a.startDate); 

,並返回filtered

return filtered; 

只是一個小提示,通常instancable函數通常用大寫的第一個字母來書寫。

+0

對不起,但我仍然沒有看到任何改變..任何建議? –

+0

請提供一小部分過濾數據。 –

+0

原來'this.props.events'是靜態的,它的值不能改變。因此,爲什麼我看不到新的變化。 –

2

Mapfilter,你需要這樣的:

// filter 
let Filtered = events.filter(x=> e.endDate > Date.now()); 

關於排序,首先,可能工作並不如預期中的情況下,條件運算符:

// sort 
    let Sorted = Filtered.sort(function(a,b) { 
     return a.startDate > b.startDate 
      ? -1 
      : (a.startDate < b.startDate ? 1 : 0); 
    }); 

其次,你可以嘗試使用Array.prototype.reduceArray.prototype.reduceRight進行排序