【问题标题】:How do I get the average of an array with the press of a button?如何通过按下按钮获得数组的平均值?
【发布时间】:2019-09-30 07:51:02
【问题描述】:
我有一些关于成绩计算器的编码问题。我到处看了看,但我无法弄清楚。它以 NaN 出现。
var inputText;
var kArry = [];
var avg;
var antal;
var sum;
function karakter(){
var inputText = document.getElementById('inputText').value;
if (inputText == 12 || inputText == 10 || inputText == 7 ||
inputText == 4 || inputText == 2 || inputText == 0 || inputText == -3) {
if(inputText !== "") {
kArry.push(inputText);
};
}
document.getElementById("arrayText").innerHTML = kArry;
antal += 1;
sum += inputText;
}
function gennemsnit() {
avg = sum/antal;
document.getElementById("gennemsnit").innerHTML = Math.round(avg);
}
【问题讨论】:
标签:
javascript
arrays
average
【解决方案1】:
出了什么问题:
-
sum 没有初始值。实际值为undefined,如果添加一个(数字)值,则会得到一个以'undefined' 开头的字符串。
稍后通过对计数使用除法,该值产生NaN。
-
antal 也是如此,它被声明了,但没有用零初始化。
-
使用字符串而不是数字来添加到sum。在那里您可以使用unary plus +,它将字符串数字转换为数字。
-
假设这些值是允许的值,您可以检查输入并将该值直接推送到数组中,而无需再次检查输入字符串是否为空。
一起:
function karakter() {
var inputText = document.getElementById('inputText').value;
if (inputText == 12 || inputText == 10 || inputText == 7 || inputText == 4 || inputText == 2 || inputText == 0 || inputText == -3) {
kArry.push(inputText);
document.getElementById("arrayText").innerHTML = kArry;
antal += 1;
sum += +inputText;
}
}
function gennemsnit() {
var avg = sum / antal;
document.getElementById("gennemsnit").innerHTML = Math.round(avg);
}
var kArry = [];
var antal = 0;
var sum = 0;
【解决方案2】:
您可以通过获取所有元素的总和然后将其除以数组的大小来计算当场的平均值。
var list = [12, 10, 7, 4, 2, 0, -3];
document.querySelector("#calc").addEventListener("click", function() {
var average = list.reduce(function(sum, item) {
return sum + item;
}, 0) / list.length;
console.log(average);
});
<button id="calc">Get Average</button>
【解决方案3】:
您正在尝试将字符串、数字和未定义的字符串相互添加。
所以从 0 开始数字并将字符串解析为数字。
var inputText;
var kArry = [];
var avg;
var antal = 0; // Start as zero.
var sum = 0; // Start as zero.
function karakter(){
var inputText = document.getElementById('inputText').value;
if (inputText == 12 || inputText == 10 || inputText == 7 ||
inputText == 4 || inputText == 2 || inputText == 0 || inputText == -3) {
if(inputText !== "") {
kArry.push(inputText);
};
}
document.getElementById("arrayText").innerHTML = kArry;
antal += 1;
sum += parseInt( inputText, 10 ); // We want the value as a number
}
function gennemsnit() {
avg = sum/antal;
document.getElementById("gennemsnit").innerHTML = Math.round(avg);
}