Reputation:
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
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
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