Javascript 如何在提要中按最近创建的用户列出帖子?

Javascript 如何在提要中按最近创建的用户列出帖子?,javascript,angular,ionic2,angularjs-orderby,Javascript,Angular,Ionic2,Angularjs Orderby,我使用Onymos作为后端。当我从onymos中提取数据时,它会给我一个“arrange by”属性,我可以在其中指定“createdTime”作为值,但是由于某种原因,它不会传递到我的模板中。我不认为在我的谷歌搜索中,有一个指令命令。因此,我不知道如何在我的模板中订购。 我的服务将数组传递给回调函数,回调函数在主TS页的contstructor中激发。 我悬赏是因为有人提供的第一个解决方案不适合我。。不断地造成错误 HOME.HTML <ion-card id="card" *ngFor

我使用Onymos作为后端。当我从onymos中提取数据时,它会给我一个“arrange by”属性,我可以在其中指定“createdTime”作为值,但是由于某种原因,它不会传递到我的模板中。我不认为在我的谷歌搜索中,有一个指令命令。因此,我不知道如何在我的模板中订购。 我的服务将数组传递给回调函数,回调函数在主TS页的contstructor中激发。 我悬赏是因为有人提供的第一个解决方案不适合我。。不断地造成错误

HOME.HTML

<ion-card id="card" *ngFor="let event of listOfEvents" >      

    <ion-row id="row1">
        <ion-col>
           <span class="showDetails">Date:</span>
           {{getFormattedTime(event.eventTime, 'MM-dd-yyyy')}}
        </ion-col>
        <ion-col>
            <span class="showDetails">Time:</span>
            {{getFormattedTime(event.eventTime, 'HH:MM')}}
        </ion-col>
        <ion-col>
            <span class="showDetails">Venue:</span>
            {{event.venue}}
        </ion-col>                                                   
    </ion-row>

</ion-card>

HOME.TS

getPosts (selectedCity, successCallback, failureCallback) {

        OnymosUtil.getData(

            '/events/' + selectedCity,      
            function getPostsSuccess (listOfEventsObject){
                successCallback(listOfEventsObject);
            },//close function getPostSuccess
            function getPostsFailure (error) {              
                failureCallback(error);
            },
            {
                orderByField: 'createdTime', //OrderByField not working 
                limitToFirst: 100
        });

    }//end getPosts
export class Home {

    listOfEvents: Array<any> = []; 
    postEvent: any; 

    constructor (public navCtrl: NavController,
                 public popoverCtrl: PopoverController,
                 public getPostSrvc: getPostsService) {

        this.listOfEvents = [];
        let that = this; 

        this.getPostSrvc.getPosts(
           this.selectedCity,
           function getPostsSuccess (listOfEventsObject) {
                for (var i in listOfEventsObject) {
                    that.listOfEvents.push(listOfEventsObject[i]);
                }
           },
           function getPostsFailure (error) {
             console.log('ERROR : home.ts : Failed retrieving Posts - ' + error);
            });
    }//close constructor 
}//close class
导出类主页{
listOfEvents:Array=[];
事件后:任何;
构造函数(公共navCtrl:NavController,
公共popoverCtrl:PopoverController,
公共getPostSrvc:getPostsService){
this.listOfEvents=[];
让那=这;
this.getPostSrvc.getPosts(
这是我选择的城市,
函数GetPostsAccess(listOfEventsObject){
for(listOfEventsObject中的变量i){
this.listOfEvents.push(listOfEventsObject[i]);
}
},
函数getPostsFailure(错误){
console.log('错误:home.ts:检索帖子失败-'+错误);
});
}//闭合构造函数
}//密级

只需在客户端对其进行排序:

function successCallback (listOfEventsObject) {

    for (var x in listOfEventsObject) {
        that.listOfEvents.push(listOfEventsObject[x]);
    }
    // sort
    that.listOfEvents = that.listOfEvents.sort(function(a, b) {
        return a.createdTime - b.createdTime;
        // or vice versa
        // or any other way you wish to sort
    });

}
  • 您确实需要找出无法在服务器上排序的原因。对于应用程序的生产版本,在客户端排序可能会变得非常昂贵,特别是当您的事件列表只更新了一两个事件时,会降低应用程序的速度。 也许您可以为
    createdTime
    使用更好的编码。是否尝试将此字段转换为时间戳值?例如,您可以使用库来执行此操作:

    event.createdTime=moment().valueOf()

  • 其他用户建议的客户端排序是在没有服务器排序的情况下的方法。但是,通过同时插入并保持数组的排序,您可以使其更为优化

您可以使用该库(或自己编写)查找要推送的位置的索引,并使用以下函数而不是普通的
push

  sortedPush( array, value ) {
      array.splice( _.sortedIndex( array, value ), 0, value );
  }

这里找到的数组反向方法最适合我:


那么,在sort函数中,我会将每个项重新推送到一个数组中吗?我需要一个数组来传递给模板。我不确定a、b、参数有何帮助。请看JavaScript排序文档。@Spilot您是否尝试实现此注释?@duanx。。。是的,但它不起作用。什么都没有发生,本身没有错误,但是我的列表的顺序和往常一样,不是我想要的顺序。你需要提供一些输出、控制台日志等等。
this.getPostSrvc.getPosts(
           this.selectedCity,
           function getPostsSuccess (listOfEventsObject) {
                for (var i in listOfEventsObject) {
                    that.listOfEvents.push(listOfEventsObject[i]);
                }
                       **that.listOfEvents.reverse();** 
           },
           function getPostsFailure (error) {
             console.log('ERROR : home.ts : Failed retrieving Posts - ' + error);
            });