对对象数组进行排序角打字稿

Posted

技术标签:

【中文标题】对对象数组进行排序角打字稿【英文标题】: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我必须使用tarkey: value,但我使用= 【参考方案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

【讨论】:

我在模板中发现语法错误。谢谢你的回答

以上是关于对对象数组进行排序角打字稿的主要内容,如果未能解决你的问题,请参考以下文章

使用随机排序顺序的打字稿数组排序

ngFor - 无法对对象数组进行排序Angular 5

如何通过两个对象打字稿角度6进行比较

如何在打字稿中过滤对象数组

打字稿:按值检查对象是不是存在于数组中

反应打字稿。使用对象填充数组状态的问题