Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用$filter和谓词函数数组的角度多列排序_Javascript_Arrays_Angularjs_Angular Filters - Fatal编程技术网

Javascript 使用$filter和谓词函数数组的角度多列排序

Javascript 使用$filter和谓词函数数组的角度多列排序,javascript,arrays,angularjs,angular-filters,Javascript,Arrays,Angularjs,Angular Filters,我需要使用angular$filter('orderBy')函数对数组进行排序,但需要指定三个谓词回调,排序顺序需要是ASC、DESC、ASC 我知道有很多方法可以解决多列排序的问题,但我的问题是关于如何使用Angular的orderBy过滤器来实现这一点 我提供的示例不是实际数据,而是一个简化的模型,以便更容易解释 我知道您可以使用简单的属性名称来处理它,如下所示: $scope.arr = $filter('orderBy')($scope.arr, ['+year', '-month',

我需要使用angular
$filter('orderBy')
函数对数组进行排序,但需要指定三个谓词回调,排序顺序需要是ASC、DESC、ASC

我知道有很多方法可以解决多列排序的问题,但我的问题是关于如何使用Angular的orderBy过滤器来实现这一点

我提供的示例不是实际数据,而是一个简化的模型,以便更容易解释

我知道您可以使用简单的属性名称来处理它,如下所示:

$scope.arr = $filter('orderBy')($scope.arr, ['+year', '-month', '+payment']);
$scope.arr = $filter('orderBy')($scope.arr, [
      function(row) {
          //complicated logic here...for demo just return the raw property  
          return row.year;
      },
      function(row) {
          //complicated logic here...for demo just return the raw property
          return row.month;
      },
      function(row) {
          //complicated logic here...for demo just return the raw property
          return row.payment;
      }
    ], true);
  }
但是,我的orderBy代码如下所示:

$scope.arr = $filter('orderBy')($scope.arr, ['+year', '-month', '+payment']);
$scope.arr = $filter('orderBy')($scope.arr, [
      function(row) {
          //complicated logic here...for demo just return the raw property  
          return row.year;
      },
      function(row) {
          //complicated logic here...for demo just return the raw property
          return row.month;
      },
      function(row) {
          //complicated logic here...for demo just return the raw property
          return row.payment;
      }
    ], true);
  }
使用我的函数数组方法,我似乎找不到提供ASC、DESC、ASC排序顺序的方法。我可以使用第三个参数翻转整个数组(
$filter('orderBy')($scope.arr,[…],true)
),但这不是我想要的

我尝试过这样形成阵列,但也没有成功:

['+', function(row){return row.year;}, '-', function(row){return row.month}, '+', function(row){return row.payment;}]
我没有主意了。是否有任何方法可以使用谓词函数回调并仍然获得每个属性指定的方向排序

angular.module('app',[]).controller('MyController',function($scope,$filter){
var-id=0;
var-arr=[];
//生成一些虚拟数据
对于(变量年份=2000;年份<2010;年份++){
对于(变量月=3;月>0;月--){
对于(var付款=100;付款<300;付款=付款+50){
变量行={
id:id++,
年份:年份,,
月份:'0'+月份,
付款:付款
};
arr.push(世界其他地区);
}
}
}
$scope.arr=arr;
$scope.order=函数(){
$scope.arr=$filter('orderBy')($scope.arr[
功能(世界其他地区){
返回行。年;
},
功能(世界其他地区){
返回row.month;
},
功能(世界其他地区){
返回行。付款;
}
],对);
}
//立即对数组进行排序
$scope.order();
});
th{
填充:10px 20px;
边框:1px纯黑;
背景颜色:浅灰色;
文本对齐:居中;
}
运输署{
填充:10px 20px;
边框:1px纯红;
}

身份证件
年
月
付款
{{row.id}}
{{row.year}
{{row.month}
{{row.payment}}
你能试试这个吗

function(row) {
      //complicated logic here...for demo just return the raw property  
      return row.year;
  },
  function(row) {
      //complicated logic here...for demo just return the raw property
      return -1*row.month;
  },
  function(row) {
      //complicated logic here...for demo just return the raw property
      return row.payment;
  }

如果使用自定义过滤器和存储过滤器首选项的对象映射,这可能会更简单。但是angular离提供这一点太近了,我希望我错过了一些东西。在不了解更多关于您的
复杂逻辑的情况下,
甚至不能提供多少信息offer@charlietfl,我不知道为什么知道我复杂的逻辑对这个问题很重要。归根结底,复杂的逻辑返回angular用来排序的原始值(数字、字符串、bool等)。我的问题是:在使用函数谓词数组时,如何让angular反转其中一个函数的顺序,就像在给定字符串属性名谓词时提供的那样,比如['+year'、'-month'、'+payment']'。也许您可以将该数组设为变量,并简单地更改分配给该变量的数组。可能会有帮助这仅在值为数字时有效。字符串列呢?我们不能返回字符串本身吗?返回“年”;返回-月份;返回“付款”