Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sum of object properties within an array

I have an array with properties, take the following for example:

var arrayPeople = [
    {
        name: 'joe',
        job: 'programmer',
        age: 25,
    },
    {
        name: 'bob',
        job: 'plumber',
        age: 30,
    };
];

I want to create a function that will return their average ages, here is what i have that is currently not working

var ageAverage = function(array) {
    var age = 0, average;
    for (var i = 0; i < array.length; i++) {
        age += array[i].age;
    }
    average = age / array.length;
    return average;
};

What I am getting when running this function is Not A Number

But what I can get to work is:

var ageAverage = function(array) {
    var age = 0, average;
    for (var i = 0; i < array.length; i++) {
        age = array[0].age;
    }
    average = age / array.length;
    return average;
};

The subtle difference here is that I took away the += and just made it =, and i took away the use of our variable i and just gave it the first index of the array. So in doing this, I know that the function is correctly substituting the parameter array with arrayPeople, but there is something going wrong in my for loop that is stopping i from becoming 0 and 1 (the indexes of arrayPeople).

P.S. I am trying to do this on my own, and I am not looking for someone to just do the problem for me, I would really appreciate just some hints on what to fix or maybe a concept I need to research the understand how to fix this problem.

Thanks!!

like image 493
Brandon Avatar asked Jan 10 '15 18:01

Brandon


People also ask

How do you add elements in array of objects in JS?

The unshift() function is one more built-in array method of JavaScript. It is used to add the objects or elements in the array. Unlike the push() method, it adds the elements at the beginning of the array. "Note that you can add any number of elements in an array using the unshift() method."

How do you sum an array in typescript?

To get the sum of an array of numbers:Use the reduce() method to iterate over the array. On each iteration, increment the accumulated sum with the current value. The result will be the sum of all the numbers in the array.


2 Answers

Consider using map and reduce:

arrayPeople.
  map(function(item){ return item.age; }).
  reduce(function(a, b){ return a + b; }, 0) / arrayPeople.length;

Or just the reduce as @KooiInc pointed out:

arrayPeople.reduce(function (a,b) { return a + b.age; }, 0) / arrayPeople.length;

A working Example:

var arrayPeople = [{
    name: 'joe',
    job: 'programmer',
    age: 25,
  }, {
    name: 'bob',
    job: 'plumber',
    age: 30,
  }],
  average = arrayPeople.reduce(function(a, b) {
    return a + b.age;
  }, 0) / arrayPeople.length;

document.write(average);
like image 115
CD.. Avatar answered Oct 26 '22 07:10

CD..


You need initialize age variable (var age = 0)

var arrayPeople = [{
  name: 'joe',
  job: 'programmer',
  age: 25,
}, {
    name: 'bob',
    job: 'plumber',
    age: 30,
}];

var ageAverage = function(array) {
  var age = 0,
      average;

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

  average = age / array.length;
  return average;
};

console.log(
  ageAverage(arrayPeople)
);

in your variant, age variable equals undefined, and undefined += number (for example 25) returns NaN;

also change , to ; in this line

from

for (var i = 0, i < array.length; i++) {

to

for (var i = 0; i < array.length; i++) {
like image 31
Oleksandr T. Avatar answered Oct 26 '22 09:10

Oleksandr T.