【问题标题】:Orderby two fields with different value type Angularjs排序两个具有不同值类型Angularjs的字段
【发布时间】:2014-04-24 18:21:15
【问题描述】:

我正在尝试基于两个字段对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
}
]

【问题讨论】:

    标签: javascript json angularjs sorting


    【解决方案1】:

    您可以通过将 pin 转换为如下数值来实现此功能:

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

    我已经用working version 更新了你的小提琴

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢回复,但还是pin为假的对象,不考虑订购日期。
      猜你喜欢
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 2017-07-23
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多