AngularJS 中对数组的列进行求和

问题描述 投票:0回答:2

我对 AngularJS(以及一般的开发)还很陌生。我正在尝试创建一款简单的游戏,但遇到了一个问题。

用户可以将单词添加到列表中,我的脚本会自动将 5 个随机数(在特定范围内)与每个项目关联起来,如下所示:

$scope.randomNum = getNum();
function getNum () {
    var arr = [];
    min = 1;
    max = 5;
    for (i=0; i<5; i++) {
        arr.push(Math.floor(Math.random() * (max - min + 1)) + minEffort);
    }
    return arr;
}

我想动态获取这些数组的列的总和。例如,如果用户添加三个单词:

  • 第一
  • 第二个
  • 第三

这些单词分别得到以下随机数:

  • [0,5,2,4,2]
  • [3,5,1,2,1]
  • [4,3,4,1,2]

我需要将每列的总数推送到页面:7, 13, 7, 7, 5。我还需要使用这些总数来进行进一步的数学运算。

我怎样才能做到这一点?

编辑 我偶然发现了这个过滤器:

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

这使我能够获得单列的总和

{{items|sumByKey: 'randomNum[i]'}}

我可以自动重申总列数吗?我可以将结果存储在另一个数组中以供进一步操作吗?

arrays angularjs sum
2个回答
1
投票

$scope.sums
将包含所有列的总和。您可以进一步使用它。

$scope.words = [];
$scope.sums = [];
$scope.getNum = function () {
    var arr = [];
    min = 1;
    max = 5;
    for (i = 0; i < 5; i++) {
        arr.push(Math.floor(Math.random() * (max - min + 1)) + minEffort);
    }
    return arr;
};

//add word and associate random number arrays
$scope.add_word = function (word) {
    $scope.words.push({word_text: word, numbers: $scope.getNum()});
};

// give columns sums,no matter what how many rows are
$scope.get_columns_sum = function () {
    angular.forEach($scope.words, function (word, key) {
        angular.forEach(word.numbers, function (number, key) {
            if (isNaN($scope.sums[key])) {
                $scope.sums[key] = number;
            } else {
                $scope.sums[key] = $scope.sums[key] + number;
            }
        });
    });
    console.log($scope.sums);
};

$scope.add_word('first word');
$scope.add_word('second word');
$scope.add_word('third word');
$scope.get_columns_sum();

0
投票

假设每个数组具有相同的长度(本例中为 5 个元素),您可以应用下一个算法。

array_of_arrays
将是要求和的数组的数组,这意味着:

var array_to_arrays = [[0,5,2,4,2], [3,5,1,2,1], [4,3,4,1,2]];

function sumCols(array_to_arrays) {
   var sum = 0;
   var sum_cols = [];
   for(var i = 0; i < 5; i++) {
      for(var j = 0; j < array_to_arrays.length; j++) {
         sum += array_to_arrays[j][i];
      }
      sum_cols.push(sum);
      sum = 0;
   }
   return sum_cols;
} 

我用一个例子创建了一个plnkr:http://plnkr.co/edit/0FElcQamh9b7nHbQDMkn?p=preview

© www.soinside.com 2019 - 2024. All rights reserved.