【问题标题】:Why my filtering and sorting is not working?为什么我的过滤和排序不起作用?
【发布时间】:2017-09-14 11:47:32
【问题描述】:

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

但它不起作用:

【问题讨论】:

  • 尝试将事件属性设置为类,使用this.events vs this.props.events

标签: javascript sorting reactjs filter react-native


【解决方案1】:

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

【讨论】:

    【解决方案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;
    

    只是一个小提示,通常可实例化的函数通常首字母大写。

    【讨论】:

    • 抱歉,我仍然没有看到任何变化。有什么建议吗?
    • 请提供少量数据进行过滤。
    • 原来this.props.events是静态的,不能改变它的值。因此,为什么我看不到新的变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多