私はデータベースからこのコレクションを持っています:
var items = [{ 'Name':'Michael', 'TypeId':1 }
{ 'Name':'Max', 'TypeId':1 }
{ 'Name':'Andre', 'TypeId':1 }
{ 'Name':'Georg', 'TypeId':2 }
{ 'Name':'Greg', 'TypeId':3 }
{ 'Name':'Mitchell', 'TypeId':2 }
{ 'Name':'Ptro', 'TypeId':1 }
{ 'Name':'Helga', 'TypeId':1 }
{ 'Name':'Seruin', 'TypeId':2 }
{ 'Name':'Ann', 'TypeId':3 }
{ 'Name':'Marta', 'TypeId':2 }]
このアイテムをTypeIdの増加順に並べ替える必要があります。
そのように:
var itemsSorted = [{ 'Name':'Michael', 'TypeId':1 }
{ 'Name':'Max', 'TypeId':1 }
{ 'Name':'Andre', 'TypeId':1 }
{ 'Name':'Ptro', 'TypeId':1 }
{ 'Name':'Helga', 'TypeId':1 }
{ 'Name':'Georg', 'TypeId':2 }
{ 'Name':'Mitchell', 'TypeId':2 }
{ 'Name':'Marta', 'TypeId':2 }]
{ 'Name':'Seruin', 'TypeId':2 }
{ 'Name':'Greg', 'TypeId':3 }
{ 'Name':'Ann', 'TypeId':3 }
オブジェクトの配列をプロパティでソートできるJavaScriptの組み込み関数はありますか?
orderBy
フィルターを使用できます。
var itemsSorted = $filter('orderBy')(items, 'TypeId')
表示中
ng-repeat="item in items | orderBy: 'TypeId'"
デフォルトでは、フィルターは昇順(明示は+TypeId
)であるため、-TypeId
を使用して降順にすることができます。
追加事項
複数のプロパティでソートする場合は、['TypeId', 'Name']
のようなstring
の代わりに配列を使用してください
ng-repeat="item in items | orderBy: ['TypeId', 'Name']"
コントローラ内で手動フィルタリングを行うと、パフォーマンスが大幅に向上します。ビューでのフィルタリングは、ダイジェストサイクルが発生するたびにng-repeat
エクスプレスとバインディングを評価するため、遅くなります。一般に、小さなコレクションではパフォーマンスの低下は見られませんが、大きなコレクションでは、ビューでのフィルタリングが遅くなります。
Js sort
関数とternary operator
var items = [{ 'Name':'Michael', 'TypeId':1 },
{ 'Name':'Max', 'TypeId':1 },
{ 'Name':'Andre', 'TypeId':1 },
{ 'Name':'Georg', 'TypeId':2 },
{ 'Name':'Greg', 'TypeId':3 },
{ 'Name':'Mitchell', 'TypeId':2 },
{ 'Name':'Ptro', 'TypeId':1 },
{ 'Name':'Helga', 'TypeId':1 },
{ 'Name':'Seruin', 'TypeId':2 },
{ 'Name':'Ann', 'TypeId':3 },
{ 'Name':'Marta', 'TypeId':2 }]
var sortedArray = items.sort(function(a,b){
return a.TypeId >b.TypeId?1:a.TypeId <b.TypeId?-1:0
})
console.log(sortedArray);
var items = [{ 'Name':'Michael', 'TypeId':1 },
{ 'Name':'Max', 'TypeId':1 },
{ 'Name':'Andre', 'TypeId':1 },
{ 'Name':'Georg', 'TypeId':2 },
{ 'Name':'Greg', 'TypeId':3 },
{ 'Name':'Mitchell', 'TypeId':2 },
{ 'Name':'Ptro', 'TypeId':1 },
{ 'Name':'Helga', 'TypeId':1 },
{ 'Name':'Seruin', 'TypeId':2 },
{ 'Name':'Ann', 'TypeId':3 },
{ 'Name':'Marta', 'TypeId':2 }];
items.sort(function(a, b) { return a.TypeId - b.TypeId; })
console.table(items);
document.getElementById('demo').innerHTML = JSON.stringify(items, null, 4);
<pre id="demo"></pre>
テンプレート内:
<li ng-repeat="item in items | orderBy:'TypeId'">...</li>
コントローラー/サービス内:
vm.sortedItems = $filter('orderBy')(items, 'TypeId');