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