getAverage in Javascript

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