1

Hey guys i have this weird issue with a javascript array that i want to calculate the sum and average of it.

So i have a prompt with an input and i'm asking the users to enter some numbers.

var sums = false;
var numbersArray = [];

function calculateAverage() {
  while (sums == false) {
    var numbers = prompt("Enter Integers.", "");
    if (numbers != null) {
      console.log(numbers);
      numbersArray.push(numbers);


    } else {
      var sum = 0;
      console.log(numbersArray);
      for (var i = 0; i < numbersArray.length; i++) {
        sum += numbersArray[i];
      }

      var avg = sum / numbersArray.length;
      console.log(avg);
      sums = true;
    }
  }
}

 calculateAverage();

So from console logs i get the following prints

4
5
1
["4", "5", "1"]
150.33333333333334

How can this be possible?

Ok my bad! Gonna accept the first answer though cause you are all correct !

2
  • 4
    ["4", "5", "1"] - this an array of strings not numbers. Commented Dec 19, 2016 at 13:09
  • A concise way of getting the average of an array in JS is avg = ["4", "5", "1"].reduce((p,c,_,a) => p + c/a.length,0); Commented Dec 19, 2016 at 15:48

9 Answers 9

3

Convert string to integer before pushing into the Array

Use parsInt

numbersArray.push(parseInt(numbers));

var sums = false;
var numbersArray = [];

function calculateAverage() {
  while (sums == false) {
    var numbers = prompt("Enter Integers.", "");
    if (numbers != null) {
      console.log(numbers);
      numbersArray.push(parseInt(numbers));


    } else {
      var sum = 0;
      console.log(numbersArray);
      for (var i = 0; i < numbersArray.length; i++) {
        sum += numbersArray[i];
      }

      var avg = sum / numbersArray.length;
      console.log(avg);
      sums = true;
    }
  }
}

calculateAverage();

Sign up to request clarification or add additional context in comments.

Comments

3

Just do parseInt before adding

var sums = false;
var numbersArray = [];

function calculateAverage() {
  while (sums == false) {
    var numbers = prompt("Enter Integers.", "");
    if (numbers != null) {
      console.log(numbers);
      numbersArray.push(numbers);


    } else {
      var sum = 0;
      console.log(numbersArray);
      for (var i = 0; i < numbersArray.length; i++) {
        sum += parseInt(numbersArray[i]);
      }

      var avg = sum / numbersArray.length;
      console.log(avg);
      sums = true;
    }
  }
}

 calculateAverage();

Comments

2
sum += numbersArray[i];

It should be

sum += parseInt(numbersArray[i]);

Because without it you add another char to your string.

Comments

2

convert the user entered variable to integer before push into array

numbersArray.push(+ numbers);

Comments

2

Use parseFloat or parseInt method to convert string to nuber before adding. Please find the attached code.

<!DOCTYPE html>
<html>

<script>
    var sums = false;
    var numbersArray = [];

    function calculateAverage() {
        while (sums == false) {
            var numbers = prompt("Enter Integers.", "");
            if (numbers != null) {
                console.log(numbers);
                numbersArray.push(numbers);


            } else {
                var sum = 0;
                console.log(numbersArray);
                for (var i = 0; i < numbersArray.length; i++) {
                    sum += parseFloat(numbersArray[i]);
                }

                var avg = sum / numbersArray.length;
                console.log(avg);
                sums = true;
            }
        }
    }
    calculateAverage();
</script>

<body>
</body>

</html>

Comments

2

You need to add parseInt to sum the integers otherwise 4,5,1 will joined to form 451 and average 451/3 = 150.33333

var sums = false;
var numbersArray = [];

function calculateAverage() {
  while (sums == false) {
    var numbers = prompt("Enter Integers.", "");
    if (numbers != null) {
      console.log(numbers);
      numbersArray.push(numbers);


    } else {
      var sum = 0;
      console.log(numbersArray);
      for (var i = 0; i < numbersArray.length; i++) {
        sum += parseInt(numbersArray[i]);
      }

      var avg = sum / numbersArray.length;
      console.log(avg);
      sums = true;
    }
  }
}
window.onload = calculateAverage();

Comments

2

Need to use ParseInt()

var sums = false;
var numbersArray = [];
calculateAverage();

function calculateAverage() {
  while (sums == false) {
    var numbers = prompt("Enter Integers.", "");
    if (numbers != null) {
      console.log(numbers);
      numbersArray.push(numbers);


    } else {
      var sum = 0;
      console.log(numbersArray, numbersArray.length);
      for (var i = 0; i < numbersArray.length; i++) {
        sum += parseInt(numbersArray[i]);

      }
      console.log(sum);
      var avg = sum / numbersArray.length;
      console.log(avg);
      sums = true;
    }
  }
}

Comments

2

How can this be possible?

Right now you are dealing with array of strings hence the behavior.

Convert the string into numeric values and this should be fixed. To change string to numeric use parseInt()

numbersArray.push(parseInt(numbers,10));

Comments

0

I see that you've found a solution already, but I've been using an easier package called Shortcuts. You can use const short = require('@testgrandma/shortcuts'); to install it and then for this script you can do

short.arrayave([array]);

It'll return you the average of the array.

https://www.npmjs.com/package/@testgrandma/shortcuts

2 Comments

Question does not talk about npm. Mostly your answer is a comment, not an answer.
It's an NPM package that I think is easier to use to find averages and other useful functions.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.