显示 angular 指令中的最大整数之和

Display sum of greatest integer in angular directive

我正在尝试创建一个指令来查找响应数据中最大整数的总和。

指令:-

.filter('sumByKey', function() {
        return function(data, key) {
            if (typeof(data) === 'undefined' || typeof(key) === 'undefined') {
                return 0;
            }

            var sum = 0;
            for (var i = data.length - 1; i >= 0; i--) {
                sum += parseInt(data[i][key]);
            }

            return sum;
        };

在上面我可以对 data 中存在的总值求和。 有一个 javascript 函数可以计算找到最大值并对最大值求和 示例:-

var array = [5, 5, 7,7,8,8];
var max = array[0], total = 0;
array.forEach((a)=>{
  if(a==max){
    total+=max;
  }
  else if(a>max){
    max = total = a;
  }
});
console.log("total:"+total);

所以这里 data 是我的 array 。想做同样的计算。我试图在 directive 上实现它,但出现错误。

编辑:-

.filter('sumByKey', function() {
        return function(data, key) {
            if (typeof(data) === 'undefined' || typeof(key) === 'undefined') {
                return 0;
            }

            for(let child of data.DeploymentTime) {
            console.log(child);
            var i = child;
            var array = [].slice.call(i);
            var max = array, total = 0;
            array.forEach((a)=>{
              if(a==max){
                total+=max;
              }
              else if(a>max){
                max = total = a;
              }
            });

            return total;
        });

我收到 is not iterable javascript 错误

根据您的代码,您正在做很多这里主要不需要的事情,下面是一个满足您要求的工作过滤器示例:

app.controller('demo', function($scope, $filter) {
  $scope.value = $filter('sumByKey')([{age:1},{age:2},{age:2}],'age'); 
})

app.filter('sumByKey', function() {
  return function(input,key) {

     if (typeof(input) === 'undefined' || typeof(key) === 'undefined') {
                return 0; 
      }

    var total = 0,max = Number.MIN_SAFE_INTEGER;
     angular.forEach(input,function(a){
              if(a[key]==max){
                total+=max;
              }
              else if(a[key]>max){
                max = total = a[key]; 
              }
            });

     return total;
  }
});