在Angular 6中按对象字段排序数组

Ste*_*eve 11 javascript arrays sorting typescript angular

我从一个从json端点获取数据的解析器获得了一个"产品"数组.

ngOnInit() {
  this.products = this._route.snapshot.data.products;
  console.log('products: ', this.products);
}
Run Code Online (Sandbox Code Playgroud)

其中一个对象中的一个对象是格式

 {
    "id": 3645,
    "date": "2018-07-05T13:13:37",
    "date_gmt": "2018-07-05T13:13:37",
    "guid": {
        "rendered": ""
    },
    "modified": "2018-07-05T13:13:37",
    "modified_gmt": "2018-07-05T13:13:37",
    "slug": "vpwin",
    "status": "publish",
    "type": "matrix",
    "link": "",
    "title": {
        "rendered": "VPWIN"
    },
    "content": {
        "rendered": "",
        "protected": false
    },
    "featured_media": 0,
    "parent": 0,
    "template": "",
    "better_featured_image": null,
    "acf": {
        "domain": "SMB",
        "ds_rating": "3",
        "dt_rating": ""
    },
    ...
},
Run Code Online (Sandbox Code Playgroud)

我想要做的是按字段对此数组进行排序 title.rendered

在古代,在AngularJS中,我只是orderBy在模板集中使用一个管道到这个字段.显然,这在Angular中已被删除,而且在进行研究时,似乎首选方法是对数据本身进行排序,例如ngOnInit.

但我无法弄清楚如何排序productsproducs.title.rendered.

amr*_*ngh 32

你可以简单地使用 Arrays.sort()

array.sort((a,b) => a.title.rendered.localeCompare(b.title.rendered));
Run Code Online (Sandbox Code Playgroud)

工作实例:

var array = [{"id":3645,"date":"2018-07-05T13:13:37","date_gmt":"2018-07-05T13:13:37","guid":{"rendered":""},"modified":"2018-07-05T13:13:37","modified_gmt":"2018-07-05T13:13:37","slug":"vpwin","status":"publish","type":"matrix","link":"","title":{"rendered":"VPWIN"},"content":{"rendered":"","protected":false},"featured_media":0,"parent":0,"template":"","better_featured_image":null,"acf":{"domain":"SMB","ds_rating":"3","dt_rating":""},},{"id":3645,"date":"2018-07-05T13:13:37","date_gmt":"2018-07-05T13:13:37","guid":{"rendered":""},"modified":"2018-07-05T13:13:37","modified_gmt":"2018-07-05T13:13:37","slug":"vpwin","status":"publish","type":"matrix","link":"","title":{"rendered":"adfPWIN"},"content":{"rendered":"","protected":false},"featured_media":0,"parent":0,"template":"","better_featured_image":null,"acf":{"domain":"SMB","ds_rating":"3","dt_rating":""}},{"id":3645,"date":"2018-07-05T13:13:37","date_gmt":"2018-07-05T13:13:37","guid":{"rendered":""},"modified":"2018-07-05T13:13:37","modified_gmt":"2018-07-05T13:13:37","slug":"vpwin","status":"publish","type":"matrix","link":"","title":{"rendered":"bbfPWIN"},"content":{"rendered":"","protected":false},"featured_media":0,"parent":0,"template":"","better_featured_image":null,"acf":{"domain":"SMB","ds_rating":"3","dt_rating":""}}];
array.sort((a,b) => a.title.rendered.localeCompare(b.title.rendered));
 
 console.log(array);
Run Code Online (Sandbox Code Playgroud)

  • @Steve来自Mdn-localeCompare()方法返回一个数字,指示引用字符串是在排序顺序之前还是之后,或者与排序顺序中的给定字符串相同.在排序字符串值时最好使用localeCompare. (2认同)

Sur*_*iya 7

尝试这个

products.sort(function (a, b) {
  return a.title.rendered - b.title.rendered;
});
Run Code Online (Sandbox Code Playgroud)

要么

您可以导入lodash / underscore库,它具有许多可用于操作,过滤,对数组进行排序的构建函数。

使用下划线:(下面仅是一个示例)

import * as _ from 'underscore';
let sortedArray = _.sortBy(array, 'title'); 
Run Code Online (Sandbox Code Playgroud)


Lui*_*noz 5

未经测试但应该可以工作

 products.sort((a,b)=>a.title.rendered > b.title.rendered)
Run Code Online (Sandbox Code Playgroud)