Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的筛选和排序不起作用?_Javascript_Sorting_Reactjs_Filter_React Native - Fatal编程技术网

Javascript 为什么我的筛选和排序不起作用?

Javascript 为什么我的筛选和排序不起作用?,javascript,sorting,reactjs,filter,react-native,Javascript,Sorting,Reactjs,Filter,React Native,我有一个objectevent数组,其中每个事件都有一个开始日期和一个结束日期 我正试图通过删除任何早于now的事件来过滤事件。然后,我尝试将我的事件排序为最新事件,然后在屏幕上显示它们 我正在使用以下例程: constructor(props) { // .. this.props.events = this.filterAndSortEvents(props.events); } filterAndSortEvents(events: Object) { let

我有一个object
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.props.events=this.filterAndSortEvents(props.events);
}
filterAndSortEvents(事件:对象)
{
让原始=事件;
const now=新日期();
//滤器
let Filtered=events.map(函数(e){
如果(e.endDate>Date.now())
{返回e}
});
//分类
let Sorted=Filtered.sort(函数(a,b){
返回a.startDate>b.startDate?-1:a.startDate

但不起作用:

也许你考虑使用过滤。

let filtered = events.filter(e => e.endDate > Date.now());
您可以使用时间的增量作为排序返回值(在原地工作)

并返回过滤后的

return filtered;
只是一个小提示,通常instancable函数通常是用大写字母写的。

不是,您需要:

// 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);
    });
//排序
let Sorted=Filtered.sort(函数(a,b){
返回a.startDate>b.startDate
? -1 
:(a.起始日期

其次,您可以尝试使用或进行排序

尝试将events属性设置为类,使用
this.events
vs
this.props.events
抱歉,我仍然看不到任何更改。。有什么建议吗?请提供少量数据进行筛选。结果表明,
this.props.events
是静态的,其值无法更改。因此,我无法看到新的变化。
 // sort
    let Sorted = Filtered.sort(function(a,b) {
        return a.startDate > b.startDate 
           ? -1 
           : (a.startDate < b.startDate ? 1 : 0);
    });