Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中获得变化数组的平均值_Javascript_Arrays_Average - Fatal编程技术网

如何在javascript中获得变化数组的平均值

如何在javascript中获得变化数组的平均值,javascript,arrays,average,Javascript,Arrays,Average,这是我在这里的第一篇文章。我是Javascript新手,我的问题是: 我有四个html输入字段。用户无需填写所有四个输入字段;一个就够了。现在我的问题是如何获得输入的平均值,不管用户只给了我一个填充的字段,还是2个、3个甚至4个填充的字段 这是我的起始代码,但有一个问题 function calculateAll() { //first create an array to gather inputs from user and create the sum var liste

这是我在这里的第一篇文章。我是Javascript新手,我的问题是:

我有四个html输入字段。用户无需填写所有四个输入字段;一个就够了。现在我的问题是如何获得输入的平均值,不管用户只给了我一个填充的字段,还是2个、3个甚至4个填充的字段

这是我的起始代码,但有一个问题

function calculateAll() {
    //first create an array to gather inputs from user and create the sum

    var listening_avg_array = new Array();
    listening_avg_array[0] = parseInt(listeningInput1_js.value);
    listening_avg_array[1] = parseInt(listeningInput2_js.value);
    listening_avg_array[2] = parseInt(listeningInput3_js.value);
    listening_avg_array[3] = parseInt(listeningInput4_js.value);

    //now we calculate the average for listening scores
    var sum = 0;
    for (var i = 0; i < listening_avg_array.length; i++) {
        sum += listening_avg_array[i];
    }

    var avg = sum / listening_avg_array.length;

    listening_avg_span_js.innerHTML = avg;
}
函数calculateAll(){
//首先创建一个数组来收集来自用户的输入并创建总和
var-listening_avg_array=新数组();
侦听_avg_数组[0]=parseInt(listinginput1_js.value);
侦听_avg_数组[1]=parseInt(listinginput2_js.value);
侦听_avg_数组[2]=parseInt(listinginput3_js.value);
侦听_avg_数组[3]=parseInt(listinginput4_js.value);
//现在我们计算听力分数的平均值
var总和=0;
for(var i=0;i
不幸的是,如果用户只给我3个或更少的输入,我会得到一个“NaN”错误;但是如果用户给我所有的四个输入,代码就可以工作,但这只是可能的条件之一。有时,我可能只能从用户那里得到2个字段,而我必须通过将总和除以2得到平均值

我不知道怎么做

下面是html:

<input id="listening-input1" type="number" min="60" max="100">
<input id="listening-input2" type="number" min="60" max="100">
<input id="listening-input3" type="number" min="60" max="100">
<input id="listening-input4" type="number" min="60" max="100">

您可以过滤包含NaN的输入,以获得设置值的数组:

const values = listening_avg_array.filter(value => !isNaN(value));
那么你可以把它加起来,除以它的长度:

const average = values.reduce((a, b) => a + b, 0) / values.length;

或者,如果您喜欢一个好的旧for循环:

var sum = 0, count = 0;
for (const value of listening_avg_array) {
    if(!isNaN(value)) {
        sum += value;
        count++;
    }
}

const average = sum / count;

您可以过滤包含NaN的输入,以获得设置值的数组:

const values = listening_avg_array.filter(value => !isNaN(value));
那么你可以把它加起来,除以它的长度:

const average = values.reduce((a, b) => a + b, 0) / values.length;

或者,如果您喜欢一个好的旧for循环:

var sum = 0, count = 0;
for (const value of listening_avg_array) {
    if(!isNaN(value)) {
        sum += value;
        count++;
    }
}

const average = sum / count;

您可以省略数组,在检查值是否为空字符串或
NaN
值后直接获取该值。顺便说一句,
'
不是
NaN
,而是一个实值,转换后不是数字

函数calculateAll(){
变量i,计数=0,总和=0,温度;

对于(var i=1;i您可以省略数组,在检查空字符串或
NaN
值后直接获取值。顺便说一句,
'
不是
NaN
,而是实值,转换后不是数字

函数calculateAll(){
变量i,计数=0,总和=0,温度;

对于(var i=1;i,如果输入未在其他地方单独处理,则使用
class
而不是
id
是一种更好的方法,并使代码更短

document.getElementById('calculate').addEventListener('click',函数(e){
calculateAll();
});
函数calculateAll(){
设总和=0,计数=0;
const inputs=document.querySelectorAll('.listening input');
输入。forEach(函数(el){
如果(!el.value)返回;
总和+=parseInt(el.值);
计数++;
});
const avg=总和/计数;
控制台日志(平均值);
}


计算
如果输入未在其他地方单独处理,则使用
而不是
id
是一种更好的方法,并使代码更短

document.getElementById('calculate').addEventListener('click',函数(e){
calculateAll();
});
函数calculateAll(){
设总和=0,计数=0;
const inputs=document.querySelectorAll('.listening input');
输入。forEach(函数(el){
如果(!el.value)返回;
总和+=parseInt(el.值);
计数++;
});
const avg=总和/计数;
控制台日志(平均值);
}


计算
您想只从填充的字段中获取平均值吗?@NinaScholz完全正确。您想只从填充的字段中获取平均值吗?@NinaScholz完全正确。这不会错吗?(例如,用户输入了3个数字,他将通过4下潜来计算平均值)这不会错吗?(例如,用户输入3个数字,他将以4为单位计算平均值)它以最短的方式完成了这项工作。谢谢。你能帮我解释一下这部分代码吗?:
code
innerHTML=count?sum/count:“无值”;很抱歉延迟,它使用带有检查并返回第一部分或第二部分的。它就像表达式的
if
。它以最短的方式完成了这项工作。谢谢。Coul你能帮我解释一下这部分代码吗?:
code
innerHTML=count?sum/count:“无值”;很抱歉延迟,它使用带有检查的,返回第一部分或第二部分。这就像表达式的
if