简体   繁体   English

Javascript Sum和Average of Array奇怪的问题

[英]Javascript Sum and Average of Array strange issue

Hey guys i have this weird issue with a javascript array that i want to calculate the sum and average of it.嘿伙计们,我有一个 javascript 数组的奇怪问题,我想计算它的总和和平均值。

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 !我会接受第一个答案,因为你都是对的!

Convert string to integer before pushing into the Array在推入数组之前将字符串转换为整数

Use parsInt使用 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在添加之前做 parseInt

 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.因为没有它,您会在字符串中添加另一个字符。

在推入数组之前将用户输入的变量转换为整数

numbersArray.push(+ numbers);

How can this be possible?这怎么可能?

Right now you are dealing with array of strings hence the behavior.现在您正在处理strings数组,因此行为。

Convert the string into numeric values and this should be fixed.将字符串转换为数值,这应该是固定的。 To change string to numeric use parseInt()要将字符串更改为数字,请使用parseInt()

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

Use parseFloat or parseInt method to convert string to nuber before adding.在添加之前使用parseFloatparseInt方法将字符串转换为 nuber。 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您需要添加 parseInt 来对整数求和,否则 4,5,1 将加入形成 451,平均 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()需要使用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; } } }

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');您可以使用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 https://www.npmjs.com/package/@testgrandma/shortcuts

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM