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
9 Answers
Reset to default 3Convert 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