Erick Matt :
So, I have created 6 objects like this:
createStatue("Statue of Liberty", "New York", 46);
createStatue("Christ the Redeemer", "Rio de Janeiro", 30);
createStatue("David", "Florence", 5.17);
createStatue("Little Mermaid", "Copenhagen", 1.25);
createStatue("Winged Victory", "Paris", 2.44);
createStatue("Venus de Milo", "Paris", 2);
Then I need a function that gets the average high of the statues. Here is what i did:
function getAverageHeight() {
let total_height = 0;
let average_height = statues.length;
if (statues.length > 0) {
for (let i = 0; i < statues.length; i++) {
let statue = statues[i];
total_height += isNaN(statues.height) ? 0 : statue.height;
}
average_height = (total_height / statues.length).toFixed(2);
}
return average_height;
}
But when i test it i got NaN as as response not the average. What I did wrong here? Can someone give a clue?
Also tried this solution here and got a NaN as a return
function getAverageHeight() {
let combinedhightInMeters = 0;
for (let statue of statues) {
combinedhightInMeters += statue.hightInMeters;
}
return (combinedhightInMeters / statues.length).toFixed(2);
}
Joseph Cho :
A lot of the solutions here are pretty good, but there are edge cases with isNan
like true
and ''
. It's safer to use parseInt
first. Here's a solution that tosses out edge cases and returns the average.
let statues = [];
function createStatue(name, city, heightInMeters) {
statues.push({
name,
city,
heightInMeters
});
}
// create statues + edge cases inputs
createStatue("Number", "New York", 46);
createStatue("Decimal", "Florence", 5.17);
createStatue("String", "Florence", '123');
createStatue("True", "Boston", true);
createStatue("Empty", "New York City", '');
function getAverageHeight() {
// Filter out bad cases here
const filteredStatues = statues.filter((x) => {
let num = parseInt(x.heightInMeters);
return !isNaN(num);
});
const total = filteredStatues.reduce((acc, x) => {
return acc+parseInt(x.heightInMeters);
}, 0);
return (total/filteredStatues.length).toFixed(2);
}
console.log(getAverageHeight());
EDIT: The OP has provided the original code. Looking at it there are some oddities.
heightInMeters: heightInMeters,
isLongerThan: function (other_statue) {
return this.highInMeters > other_statue.hightInMeters;
It looks like there are several typos here and the code shouldn't run.
Guess you like
Origin http://43.154.161.224:23101/article/api/json?id=220078&siteId=1