求和阵列' AngularJS中的列

时间:2015-03-07 14:54:20

标签: arrays angularjs sum

我是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]'}}

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

2 个答案:

答案 0 :(得分: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 colums sums,no matter what how many rows are
$scope.get_colums_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_colums_sum();

答案 1 :(得分: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