Reputation:
I'm developing an AngularJS application, working with Parse.com as the backend.
What I'm trying to achieve:
I have multiple answer scores (values) stored within an Array, I want to be able to add up each value within each Array and display the total of each set.
e.g
Set 1 [1,2,3] = 6 Points
Set 2 [1,1,1,1] = 4 Points
Current Problems:
No matter what example I attempt to use I can't seem to get this working.
Any help / advice would be helpful!
Controller JS:
var dashApp = angular.module('dashApp.controllers', ['chart.js']);
dashApp.controller("dashboardCtrl", function($scope, $http, $filter) {
$scope.parseRecommend = [];
// Question Answer Array
$scope.parseQ1P1 = [];
$scope.parseQ1P2 = [];
$scope.parseQ2P1 = [];
$scope.parseQ2P2 = [];
$scope.parseQ3P1 = [];
$scope.parseQ4P1 = [];
$scope.parseQ5P1 = [];
var hashmap = {};
$http({
method: 'GET',
url: 'https://api.parse.com/1/classes/Customers',
headers: {
'X-Parse-Application-Id': 'xxx',
'X-Parse-REST-API-Key': 'xxx'
}
})
.success(function(data, error) {
$scope.parseResults = data.results;
// Widget Data
angular.forEach($scope.parseResults, function(results) {
$scope.parseRecommend.push(results.question_4_p1);
// Get Question Anwsers
$scope.parseQ1P1.push(results.question_1_p1);
$scope.parseQ1P2.push(results.question_1_p2);
$scope.parseQ2P1.push(results.question_2_p1);
$scope.parseQ2P2.push(results.question_2_p2);
$scope.parseQ3P1.push(results.question_3_p1);
$scope.parseQ4P1.push(results.question_4_p1);
$scope.parseQ5P1.push(results.question_5_p1);
});
$scope.parseRecommend.forEach(function(elm) {
hashmap.hasOwnProperty(elm) ? ++hashmap[elm] : hashmap[elm] = 1
});
// Widget One
var yesAmount = hashmap.yes;
var noAmount = hashmap.no;
$scope.widgetone_data = [yesAmount, noAmount];
$scope.widgetone_label = ["Yes", "No"];
// Widget Two
$scope.widgettwo_label = ['Q1', 'Q2', 'Q3', 'Q4', 'Q5', 'Q6', 'Q7', 'Q8', 'Q9', 'Q10'];
$scope.widgettwo_data = [
[65, 59, 100, 81, 56, 55, 40, 44, 87, 12],
[22, 33, 44, 11, 55, 6, 97, 5, 72, 45]
];
})
.error(function(data, error) {
alert('Failed, error code: ' + error.message);
});
});
Upvotes: 0
Views: 1862
Reputation: 3531
I made a slightly change based on @Akshay's code. It calculates the sum of individual array and display individually.
Array 0 sum: 599
Array 1 sum: 390
<div ng-app="app" ng-controller="demoController">
<div ng-repeat="value in arraySum track by $index">Array {{$index}} sum: {{value.sum}}</div>
</div>
var app= angular.module("app",[]);
app.controller('demoController', ['$scope', function($scope) {
$scope.sum = 0;
$scope.arraySum = [];
$scope.widgettwo_data = [
[65, 59, 100, 81, 56, 55, 40, 44, 87, 12],
[22, 33, 44, 11, 55, 6, 97, 5, 72, 45]
];
angular.forEach($scope.widgettwo_data,function(arr){
$scope.sum = 0;
if(angular.isArray(arr)){
angular.forEach(arr,function(num){
$scope.sum += num;
});
$scope.arraySum.push({
sum: $scope.sum
});
}
else{
$scope.sum += num;
$scope.arraySum.push({
sum: $scope.sum
});
}
});
}]);
Upvotes: 0
Reputation: 4292
here:
var Set1 = [1,2,3],
Set2 = [1,1,1,1];
$scope.tot1 = Set1.reduce((p,c) => p + c); //6
$scope.tot2 = Set2.reduce((p,c) => p + c); //4
or if nested in Array like this:
var Sets = [];
Sets.push(Set1);
Sets.push(Set2);
var result = Sets.map(val => val.reduce((p,c) => p+c));
// result == [6, 4]
ps. if you wonder p and c stands for previous and current, here is relevant documentation
Upvotes: 3
Reputation: 5413
You could create a function within the scope that totals them:
$scope.set_1 = [1,2,3];
$scope.set_2 = [1,1,1,1];
$scope.totalArray = function(passed_array){
var total = 0;
for (var index=0; index<passed_array.length; index++) {
total += passed_array[index];
}
return total;
}
$scope.total_1 = $scope.totalArray($scope.set_1);
$scope.total_2 = $scope.totalArray($scope.set_2);
Upvotes: 0
Reputation: 274
As i can see in you code you want to sum values inside and array of array.Then there are lot of ways.You can make an array of array like in example One you can look into the example i am doing for you in fiddle. Have a look of it. If there is any mismatch then please reply i will help you in that.
<div ng-app="app" ng-controller="demoController">
{{sum}}
</div>
var app= angular.module("app",[]);
app.controller('demoController', ['$scope',
function($scope) {
$scope.sum = 0;
$scope.widgettwo_data = [
[65, 59, 100, 81, 56, 55, 40, 44, 87, 12],
[22, 33, 44, 11, 55, 6, 97, 5, 72, 45]
];
angular.forEach($scope.widgettwo_data,function(arr){
if(angular.isArray(arr)){
angular.forEach(arr,function(num){
$scope.sum += num;
});
}
else{
$scope.sum += num;
}
});
}]);
Upvotes: 0