Показать сумму наибольшего целого числа в угловой директиве - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь создать директиву для поиска суммы наибольшего целого числа в данных ответа.

директива: -

.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.Хочешь сделать такой же расчет.Я пытался реализовать это в директиве , но получил ошибку.

РЕДАКТИРОВАТЬ: -

.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

1 Ответ

0 голосов
/ 04 июня 2018

Согласно вашему коду, вы делаете много вещей, которые в основном здесь не нужны, ниже пример рабочего фильтра, который выполняет ваше требование:

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;
  }
});
...