我对 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]'}}
我可以自动重申总列数吗?我可以将结果存储在另一个数组中以供进一步操作吗?
$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();
假设每个数组具有相同的长度(本例中为 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