最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Javascript Sum and Average of Array strange issue - Stack Overflow

programmeradmin4浏览0评论

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();

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 !

Share Improve this question edited Dec 19, 2016 at 13:15 Konstantinos Natsios asked Dec 19, 2016 at 13:05 Konstantinos NatsiosKonstantinos Natsios 2,9249 gold badges41 silver badges77 bronze badges 2
  • 4 ["4", "5", "1"] - this an array of strings not numbers. – VLAZ 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); – Redu Commented Dec 19, 2016 at 15:48
Add a ment  | 

9 Answers 9

Reset to default 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();

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();

sum += numbersArray[i];

It should be

sum += parseInt(numbersArray[i]);

Because without it you add another char to your string.

convert the user entered variable to integer before push into array

numbersArray.push(+ numbers);

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>

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();

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;
    }
  }
}

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));

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./package/@testgrandma/shortcuts

发布评论

评论列表(0)

  1. 暂无评论