考虑具有以下数据的JSON对象:
{
"results": [
{
flags: [
is_special: true // or false, or non-existing
],
type: "typeone" // or typetwo, or non-existing
},
... // repeats
]
}
为订阅结果的ng-repeat="result in json.results"
创建过滤器的有效方法是什么:
is_special=true
放在首位,按#2排序,& #3。typeone
放在typetwo
typetwo
放在所有其余的(或没有任何标志/类型)之前。 重要提示:当其中一些属性不存在或等于""
时,它不会失败
由于
答案 0 :(得分:2)
我不认为这是最好的方法,但有一种方法可以使用Underscore JS。希望有人可以优化我的代码:
// Grab the items that have the flag
first = _.filter(results, function(r)
{
return r.flags.is_special;
}
// Grab the remainder
remainder = _.where(results, {flags.is_special: false});
// Now grab your second list
second = _.filter(remainder, function(r)
{
return r.type =='typeone';
});
// Again grab the remainder (and so on)
// Then return your 4 lists
答案 1 :(得分:0)
orderBy
接受一系列参数,因此您可以直接进入列表:
ng-repeat="result in json.results | orderBy: [isSpecial, typeFilter]"
$scope.isSpecial = function(item) {
for (var i = 0; i < item.flags.length; i++) {
if (item.flags[i]["is_special"])
return true;
}
}
$scope.typeFilter = function(item) {
item.type == "typeone" ? return 1 : return 0;
}