由两个具有不同值类型Angularjs的字段排序

时间:2014-04-24 18:21:16

标签: javascript json angularjs sorting

我正在尝试基于两个字段来订购json数据,并且排序的优先级应该基于字段值,然后是日期。

以下是测试演示

输入json

[{
"title" : "Title 2",
"pin"   : false,
"date" : 20130411204207
},{
"title" : "Title 3",
"date" : 20140411204207
},{
"title" : "Title 4",
"date" : 20120411204207
},{
"title" : "Title 1",
"pin"   : true,
"date" :  20100411204207
}]

我要做的是用“pin:true”作为第一项来制作对象,然后其余部分应该基于“date”的降序,“pin”是一个可选字段。我正在尝试“orderBy”方法,有没有解决方法?

http://jsfiddle.net/tomalex0/tvLUK/1/

输出json

[
{
    "title": "Title 1",
    "pin": true,
    "date": 20100411204207
},
{
    "title": "Title 3",
    "date": 20140411204207
},
{
    "title": "Title 2",
    "pin": false,
    "date": 20130411204207
},
{
    "title": "Title 4",
    "date": 20120411204207
}
]

2 个答案:

答案 0 :(得分:2)

您可以通过将引脚转换为数字值来实现此目的:

$filter('orderBy')($scope.sorted, ["0 + !!pin", "date"], true);

我用working version

更新了你的小提琴

答案 1 :(得分:1)

尝试使用像这样的排序表达式

 $scope.sortData = function (){
    var newdata = $filter('orderBy')(arrayval, ["pin == undefined ? -1 : (pin ? 1 : 0)","date"],true);
     console.log(newdata);
}