我有一个对象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 :(得分:3)
// 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.reduce或Array.prototype.reduceRight进行排序
答案 1 :(得分: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;
只是一个小提示,通常是不可修改的函数通常用大写的第一个字母写成。