使用Javascript从输入数组中查找平均值-计算不正确
我试图计算用户选择的3个值(每个值的编号范围为1-10)的平均值,然后将结果传递给文本输入(以图形形式显示) 它应该在每次更改一个值时更新新的平均值,但平均值根本无法正常工作。我认为循环并不是每次运行时都重置值,而是每次运行时将总和相加,但不确定如何修复它 这是我的密码:使用Javascript从输入数组中查找平均值-计算不正确,javascript,arrays,moving-average,Javascript,Arrays,Moving Average,我试图计算用户选择的3个值(每个值的编号范围为1-10)的平均值,然后将结果传递给文本输入(以图形形式显示) 它应该在每次更改一个值时更新新的平均值,但平均值根本无法正常工作。我认为循环并不是每次运行时都重置值,而是每次运行时将总和相加,但不确定如何修复它 这是我的密码: var sliders = $("#health1,#health2,#health3"); var elmt = []; $(sliders).each(function () { elmt.push($(thi
var sliders = $("#health1,#health2,#health3");
var elmt = [];
$(sliders).each(function () {
elmt.push($(this).attr('value'));
$("#health1,#health2,#health3").change(function () {
var sum = 0;
averageRisk();
});
});
function averageRisk() {
var sum = 0;
for (var i = 0; i < elmt.length; i++) {
sum += parseInt(elmt[i], 10);
}
var avg = sum / elmt.length;
document.getElementById('healthLevel').value = +avg;
elmt.push($(sliders).attr('value'));
$('#healthLevel').val(avg).trigger('change');
console.log("Sum: " + sum);
console.log("Average: " + avg);
}
var滑块=$(“#健康1,#健康2,#健康3”);
var-elmt=[];
$(滑块)。每个(函数(){
elmt.push($(this.attr('value'));
$(“#health1,#health2,#health3”)。更改(函数(){
var总和=0;
averageRisk();
});
});
函数averageRisk(){
var总和=0;
对于(变量i=0;i
以下是一个例子:
不确定,但似乎还有很多额外的工作要做。主要问题是您正在构建初始值的数组,而不是在每次值更改时获取它们。首先是
。每个
获得所有滑块值,并将它们添加到elmt
,并在每次更改后继续将新值推送到,而不是每次仅获取当前值。是否要随时间累积所有值
小提琴:
$(“#健康1,#健康2,#健康3”)。关于('change',function(){
averageRisk();
});
函数averageRisk(){
var总和=0;
var elmt=$(“#health1,#health2,#health3”);
对于(变量i=0;i
如前所述,如果你想在总和为NaN时忽略更新,你可以这样做:
function averageRisk() {
var sum = 0;
var elmt = $("#health1,#health2,#health3");
for (var i = 0; i < elmt.length; i++) {
sum += parseInt(elmt[i].value, 10); //don't forget to add the base
}
if (isNaN(sum)) {
return false;
}
var avg = sum / elmt.length;
document.getElementById('healthLevel').value = +avg;
$('#healthLevel').val(avg).trigger('change');
console.log("Sum: " + sum);
console.log("Average: " + avg);
}
函数averageRisk(){
var总和=0;
var elmt=$(“#health1,#health2,#health3”);
对于(变量i=0;i
不确定,但似乎还有很多额外的工作要做。主要问题是您正在构建初始值的数组,而不是在每次值更改时获取它们。首先是。每个
获得所有滑块值,并将它们添加到elmt
,并在每次更改后继续将新值推送到,而不是每次仅获取当前值。是否要随时间累积所有值
小提琴:
$(“#健康1,#健康2,#健康3”)。关于('change',function(){
averageRisk();
});
函数averageRisk(){
var总和=0;
var elmt=$(“#health1,#health2,#health3”);
对于(变量i=0;i
如前所述,如果你想在总和为NaN时忽略更新,你可以这样做:
function averageRisk() {
var sum = 0;
var elmt = $("#health1,#health2,#health3");
for (var i = 0; i < elmt.length; i++) {
sum += parseInt(elmt[i].value, 10); //don't forget to add the base
}
if (isNaN(sum)) {
return false;
}
var avg = sum / elmt.length;
document.getElementById('healthLevel').value = +avg;
$('#healthLevel').val(avg).trigger('change');
console.log("Sum: " + sum);
console.log("Average: " + avg);
}
函数averageRisk(){
var总和=0;
var elmt=$(“#health1,#health2,#health3”);
对于(变量i=0;i
问题是在页面加载时填充elmt
数组
当用户更改值时,您不会刷新elmt
数组。因此,用于计算平均值的数组总是相同的,为空
每次修改输入值时,都必须恢复它们
function averageRisk() {
var sum = 0;
// Re make the loop for getting all inputs values
$(sliders).each(function() {
var value = parseInt($(this).val(), 10);
sum += value;
});
var avg = sum/$(sliders).length;
$('#healthLevel').val(avg);
}
工作示例:
PS:您可以使用css类
healthInput
来选择您的输入。如果稍后添加其他字段,则不必将新的输入id添加到jQuery选择器。问题在于,在页面加载时填充elmt
数组
当用户更改值时,您不会刷新elmt
数组。因此,用于计算平均值的数组总是相同的,为空
每次修改输入值时,都必须恢复它们
function averageRisk() {
var sum = 0;
// Re make the loop for getting all inputs values
$(sliders).each(function() {
var value = parseInt($(this).val(), 10);
sum += value;
});
var avg = sum/$(sliders).length;
$('#healthLevel').val(avg);
}
工作示例:
PS:您可以使用css类
healthInput
来选择您的输入。如果稍后添加其他字段,则不必将新的输入id添加到jQuery选择器。我完成了这项工作,请检查它
我做了这项工作,检查一下
是否应该有一个
elmt.pop()
或elmt=[]代码>某处?否则,您将一直添加到数组中。请尝试以下操作:是否应该有elmt.pop()
或elmt=[]代码>某处?否则,您将一直添加到阵列中。试试这个:这是一个很好的解决方案。它可能希望忽略空元素(或者将它们当作0?),因为现在一个空元素将填充“NaN”非常正确!更新答案。是的,我同意这是一个很好的解决方案。它就像我想要的那样工作。在我的