我是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;
}
我想动态获取这些数组的列的总和。例如,如果用户添加三个单词:
这些词分别得到以下随机数:
我需要向页面推送每一列的总数: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]'}}
我可以自动重复列总数吗?我可以将结果存储在另一个数组中以进行进一步的操作吗?
答案 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