对对象数组进行排序角打字稿
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
【讨论】:
我在模板中发现语法错误。谢谢你的回答以上是关于对对象数组进行排序角打字稿的主要内容,如果未能解决你的问题,请参考以下文章