【问题标题】:Sort an Array of Objects angular typescript对对象数组进行排序角打字稿
【发布时间】:2018-10-09 14:15:16
【问题描述】:

在 TypeScript 应用程序中,我设置对象数组并在我的模板中显示给用户

feedList: News[] =
  [
    { type: 1, slug: 'news', date: '2018/04/30', title: 'Header New', content: 'Lorem ipsum dolor sit amet'},
    { type: 2, slug: 'post', date: '2018/04/20', title: 'Header New', content: 'Lorem ipsum dolor sit amet' },
    { type: 1, slug: 'news', date: '2018/04/28', title: 'Header New', content: 'Lorem ipsum dolor sit amet' },
    { type: 1, slug: 'news', date: '2016/04/28', title: 'Header New', content: 'Lorem ipsum dolor sit amet' },
    { type: 2, slug: 'post', date: '2018/03/28', title: 'Header New', content: 'Lorem ipsum dolor sit amet' }
  ];

我有排序功能

sortByType(feedList: News[]): void {
    feedList.sort(function(a, b) {
      return a.type - b.type;
    });
  }

我在模板中调用它

%button.btn{(click)="sortByType(this.feedList)"} Sort

但是没有变化和错误。我做错了什么?

如果我简单地使用

[#objectarray#].sort(function(a, b) {
          return a.type - b.type;
        });

——有效

更新:所有模板

.feed
  %button.btn{(click)="sortByType(this.feedList)"}
    Sort by type
  .f-item{*ngFor: "let feedItem of feedList", class: "{{feedItem.slug}}"}
    .type
      {{feedItem.type}} {{feedItem.slug}}
    .date
      {{feedItem.date}}

【问题讨论】:

  • 你能展示更多你的模板吗?对我来说它看起来像语法错误。
  • 是的,谢谢!在haml我必须使用tar{key: value,但我使用=

标签: javascript arrays angular typescript sorting


【解决方案1】:

如果值为字符串

 data.sort((a, b) => a.status.localeCompare(b.status));  

如果值是int

data.sort((a, b) => a.status===b.status?-1:0); 

【讨论】:

    【解决方案2】:

    我在 Angular 中使用 Typescript 编写了一个排序函数,它根据列表的属性对对象数组进行排序。

    假设我们有一个这样的对象列表:

    Items: News[] =
    
          [
            { type: 1, slug: 'news', title: 'Header New', content: 'Lorem ipsum dolor sit amet'},
            { type: 2, slug: 'post', title: 'Header New', content: 'Lorem ipsum dolor sit amet' },
            { type: 1, slug: 'news', title: 'Header New', content: 'Lorem ipsum dolor sit amet' },
            { type: 1, slug: 'news', title: 'Header New', content: 'Lorem ipsum dolor sit amet' },
            { type: 2, slug: 'post', title: 'Header New', content: 'Lorem ipsum dolor sit amet' }
          ];
    

    我的功能是这样的:

    sort(array:any[],property:string,isNumber:boolean){
            if(isNumber){
                return array.sort((item1,item2)=> {
                    return (item1[property] > item2[property]) ? 1 : -1;});
            }else{
                return array.sort((item1,item2)=> {
                    return (item1[property].toLowerCase() > item2[property].toLowerCase()) ? 1 : -1;});
            }
        }
    
    • 参数 1:是应该排序的数组
    • param 2 : 是基于它进行排序的属性
    • param 3 : 是判断 param 2 是数字还是字符串的布尔值

    【讨论】:

      【解决方案3】:

      在您的模板中:

      (click)="sortByType(feedList)"
      

      在组件中:

      sortByType(feedList: News[]): void {
          feedList.sort(function(a, b) {
            return a.type - b.type;
          });
      this.feedList = feedList  }
      

      在您要显示排序数组的模板中放置:

      {{feedList|json}}
      

      【讨论】:

      • 我在模板中发现语法错误。谢谢你的回答
      猜你喜欢
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 2022-11-25
      • 2017-02-12
      • 1970-01-01
      相关资源
      最近更新 更多