user19551233
user19551233

Reputation:

Finding average using function forEach

How can I find the average of an object(number) using function forEach?

     var people =[{ 
    name = "John"
    number = "283.37"
    },{
   name = "Susan"
   number = "125,44"
   },{
  name = "Karen"
  number = "98,7"
  }];

    var sum = 0;
people.forEach(function(num) { sum += num});


  average = sum / people.length;
  console.log(average);

I get the Nan error

Upvotes: 0

Views: 309

Answers (2)

Dwayne Draper
Dwayne Draper

Reputation: 81

var people =[{ 
  name: "John",
  number: "283.37"
},{
  name: "Susan",
  number: "125.44"
},{
  name: "Karen",
  number: "98.7"
}];

var sum = 0;
for (let i = 0; i < people.length; i++) {
  sum += parseFloat(people[i].number);
}

console.log("average: ", sum / people.length);

You have some problems with the formatting here. Numbers should have a period, not a comma. Also, you need colons and not equals, with commas separating different properties.

var people =[{ 
  name: "John",
  number: "283.37"
},{
  name: "Susan",
  number: "125.44"
},{
  name: "Karen",
  number: "98.7"
}];

The next part is okay. var sum = 0;

I won't go fully into the reasons, and you don't have to use it, but I prefer a regular for loop here, as so. You need to parseFloat your strings.

for (let i = 0; i < people.length; i++) {
  // You have to make sure you parseFloat since the 'numbers' from the objects are in fact strings.
  sum += parseFloat(people[i].number);
}

// Then you can return the average.
console.log(sum / people.length);

Upvotes: 0

WillD
WillD

Reputation: 6542

You have some syntax issues in your object literal. And then you must first convert your number prop to something that can be added. I use parseFloat() to make number from string.

var people = [{
  name:"John",
  number:"283.37"
}, {
  name: "Susan",
  number: "125,44"
}, {
  name:"Karen",
  number: "98,7"
}];

var sum = 0;
people.forEach(function(item) {
  sum += parseFloat(item.number);
});


average = sum / people.length;
console.log(average);

Or you can do this with Array.reduce():

var people = [{
  name:"John",
  number:"283.37"
}, {
  name: "Susan",
  number: "125,44"
}, {
  name:"Karen",
  number: "98,7"
}];

const average = people.reduce((a, b) => (a +  parseFloat(b.number)), 0) / people.length;
console.log(average);

Upvotes: 3

Related Questions