为什么我的过滤和排序无效?

时间:2017-04-18 14:53:36

标签: javascript sorting reactjs filter react-native

我有一个对象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;
}

但它不起作用:

2 个答案:

答案 0 :(得分:3)

Map不是filter,你需要这个:

// 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进行排序

答案 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;

只是一个小提示,通常是不可修改的函数通常用大写的第一个字母写成。