JSONエンドポイントからデータを取得するリゾルバーから一連の「製品」を取得しています。
ngOnInit() {
this.products = this._route.snapshot.data.products;
console.log('products: ', this.products);
}
この配列内のオブジェクトの1つは次の形式です
{
"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": ""
},
...
},
私がやりたいのは、この配列をフィールドtitle.rendered
でソートすることです
昔、AngularJSでは、このフィールドに設定されたテンプレートでorderBy
パイプを使用するだけでした。どうやら、これはAngularで削除されており、調査を行う上で、ngOnInit
のようにデータ自体をソートすることをお勧めします。
しかし、products
をproducs.title.rendered
でソートする方法がわかりません。
単にArrays.sort()
を使用できます
array.sort((a,b) => a.title.rendered.localeCompare(b.title.rendered));
作業例:
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);
試してみてください
products.sort(function (a, b) {
return a.title.rendered - b.title.rendered;
});
または
Lodash/underscoreライブラリをインポートできます。このライブラリには、配列などを操作、フィルタリング、ソートするための多くのビルド関数があります。
アンダースコアの使用:(以下は単なる例です)
import * as _ from 'underscore';
let sortedArray = _.sortBy(array, 'title');
テストされていませんが、動作するはずです
products.sort((a,b)=>a.title.rendered > b.title.rendered)