Kimberly
Kimberly

Reputation: 43

How to create a for loop for an array with multiple elements?

I'm a student studying JavaScript so my knowledge isn't complex, so please be gentle. :)

I have been given:

var region1 = [1540, 1130, 1580, 1105];
var region2 = [2010, 1168, 2305, 4102];

var region3 = [2450, 1847, 2710, 2391];

var region4 = [1845, 1491, 1284, 1575];

var region5 = [2120, 1767, 1599, 3888];

Each number in the bracket represents the numbers of the quarter. I need to give for loops that sum up the sales for each region (addition across) and for each quarter (addition down the column). I understand how to do single item arrays. For example:

var sum=0;
for (var i = 0; i < totals.length; i++) {
sum += totals [i];
}

Thank you in advanced.

Upvotes: 4

Views: 386

Answers (5)

kevin ternet
kevin ternet

Reputation: 4612

I think first you should obtain a array of array :

var region1 = [1540, 1130, 1580, 1105];
var region2 = [2010, 1168, 2305, 4102];
var region3 = [2450, 1847, 2710, 2391];
var region4 = [1845, 1491, 1284, 1575];
var region5 = [2120, 1767, 1599, 3888];
var rawArr = [];
rawArr.push(region1);
rawArr.push(region2);
rawArr.push(region3);
rawArr.push(region4);
rawArr.push(region5);

Then you will be able to process addition across and addition down columns:

var summRegion = rawArr.map((element) => element.reduce((a, b)=> a + b,0));
console.log(summRegion); // [ 5355, 9585, 9398, 6195, 9374 ]
var sumColumns = [0,0,0,0];

for (var i = 0; i < 4; i++)
    rawArr.forEach((element) => {sumColumns[i] += element[i]});

console.log(sumColumns); // [ 9965, 7403, 9478, 13061 ]

Upvotes: 1

dama
dama

Reputation: 306

I included both calculation for both quarter and regions. Working example can be found in https://jsfiddle.net/d8hLc9L5/5/.

var regions = [
    [1540, 1130, 1580, 1105],
    [2010, 1168, 2305, 4102],
    [2450, 1847, 2710, 2391],
    [1845, 1491, 1284, 1575],
    [2120, 1767, 1599, 3888]
  ],
  countRegions = regions.length,
  countQuarter = 4;

function SumQuarter() {
  for (var q = 0; q < countQuarter; q++) {
    var sumQuarter = 0;
    for (var r = 0; r < countRegions; r++) {
      sumQuarter = sumQuarter + regions[r][q];

    }
    console.log('quarter:' + (q + 1) + ' sum: ' + sumQuarter);
  }
}

function SumRegions() {

  for (var r = 0; r < countRegions; r++) {
    var sumRegions = 0;
    for (var q = 0; q < countQuarter; q++) {
      sumRegions += regions[r][q];
    }
    console.log('region:' + (r + 1) + ' sum: ' + sumRegions);

  }
}
SumQuarter();
SumRegions();

Upvotes: 0

jmealy
jmealy

Reputation: 592

Here are two functions to do what I believe you're asking. The first takes a single region as an argument, and outputs the sum of its numbers.

The second takes two arguments - the quarter you'd like the sum of, and an array containing all regions.

var region1 = [1540, 1130, 1580, 1105];
var region2 = [2010, 1168, 2305, 4102];
var region3 = [2450, 1847, 2710, 2391];
var region4 = [1845, 1491, 1284, 1575];
var region5 = [2120, 1767, 1599, 3888];

var allRegions = [region1, region2, region3, region4, region5];

function getRegionTotal(region) {
  var total = 0;
  for (var i = 0; i < region.length; i++) {
    total += region[i];
  }
  return total;
}

var region1Total = getRegionTotal(region1);
console.log('Region 1 total:', region1Total);

function getQuarterTotal(quarter, regions) {
  var total = 0;
  for (var i = 0; i < regions.length; i++) {
    // Note that we reduce the quarter variable by one.  This is due to arrays being zero-based.
    total += regions[i][quarter - 1];
  }
  return total;
}
 
var quarter2Total = getQuarterTotal(2, allRegions);
console.log('Quarter 2 total:', quarter2Total);

Upvotes: 1

Adam Azad
Adam Azad

Reputation: 11297

I am not sure if this what you are after, but I presume you want the total sales for a quarter in all the five regions;

var regions = {
    region1:[1540, 1130, 1580, 1105],
    region2:[2010, 1168, 2305, 4102],
    region3:[2450, 1847, 2710, 2391],
    region4:[1845, 1491, 1284, 1575],
    region5:[2120, 1767, 1599, 3888]
  };

var totalPerRegion = 0,
    quarter1 = 0,
    quarter2 = 0,
    quarter3 = 0,
    quarter4 = 0;

for(region in regions){
    // calculate the sales per quarters;
    quarter1 += regions[region][0];
    quarter2 += regions[region][1];
    quarter3 += regions[region][2];
    quarter4 += regions[region][3];
}

console.log('quarter 1:', quarter1);
console.log('quarter 2:', quarter2);
console.log('quarter 3:', quarter3);
console.log('quarter 4:', quarter4);

Upvotes: 2

25r43q
25r43q

Reputation: 623

Do you mean something like this?

var quarterlyResultsObj = {};
for( var x = 0 ; x < region1.length ; x++ ){
    var thisQuarter = "quarter_" + x;
    var quarterResult = region1[x] + region2[x] + region3[x] + region4[x] + region5[x];  
    quarterlyResultsObj[ thisQuarter ] = quarterResult;
}

after that you'll have an object structured like this:

{
    quarter_1 : 6000,
    quarter_2 : 5000,
    quarter_3 : 7000,
    quarter_4 : 5600
}

Upvotes: 0

Related Questions