我想根据以下条件对数据进行排序:
按type
排序,优先顺序为[州,市,区]。
- 类型为state的数据应该位于第一位,然后是带有city的数据,依此类推。
重复数据应按score
排序。
-eg:如果3行是类型,则按分数排序。
我的数据对象是:
$scope.data = [{
id: 1,
name: 'ABC',
type: 'city',
score: 0.1
}, {
id: 2,
name: 'PQR',
type: 'city',
score: 0.7
}, {
id: 3,
name: 'ABC',
type: 'state',
score: 0.3
});
模板是:
<div ng-repeat="d in data">
<span>{{d.name}}</span>
<span>{{d.type}}</span>
<span>{{d.score}}</span>
</div>
结果应该是这样的:
ABC state 0.3
PQR city 0.7
ABC city 0.1
Here是plunker的链接。
我希望按多个字段以及特定的优先级对其进行排序。
任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:1)
您可以在lodash库中找到所需的一切。
以下是文档:https://lodash.com/docs/4.17.4
您的起点是orderBy方法:https://lodash.com/docs/4.17.4#orderBy
解决您的问题:
$scope.data = lodash.orderBy($scope.data, ['type','score'], ['desc', 'desc']);
您可以将ngLodash用于angularjs(使用bower / npm进行简单安装):https://github.com/rockabox/ng-lodash
享受!
答案 1 :(得分:1)
//这是我的代码。我认为这段代码解决了你的问题
var tempFlag = {'state':1, 'city':2, 'district':3}
$scope.data=[
{
id: 1,
name: 'ABC',
type: 'city',
score: 0.1
}, {
id: 2,
name: 'PQR',
type: 'city',
score: 0.7
}, {
id: 3,
name: 'ABC',
type: 'state',
score: 0.3
}
].sort(function(a, b) {
if(a.type == b.type)
return a.score < b.score;
return tempFlag[a.type] > tempFlag[b.type];
});