平均问题

Problems averaging

我在 javascript 中有以下函数来计算平均值:

function calculaMediaFinal () {
    var soma = 0;
    for(var i = 1; i>5; i++) { 
        soma += parseInt(document.getElementById('resultado' + i).value, 10); 
    }

    var media = soma / 5;

    var inputCuboMedia = document.getElementById('ConcretizaObj');
    inputCuboMedia.value = parseInt(media, 10);
}

function ContarObjetivos() {
    let contador = 0;
    if(document.getElementById('resultado' + i).value) {
        contador++;
    }
}

但是我有一个问题,就是我输入的最多有 5 个是不正确的,因为用户是他选择他想要多少结果的人。也就是说,如果用户只想要4个,那5个就不能填了。如果没有数字5,但有用户想要的结果数,如何求平均?

如果我理解你的问题是正确的,你想要这样的东西。创建一个新的数字输入字段,用于存储用户想要的金额。将输入字段的值放在一个变量中并在您的代码中使用它?此外,它可能需要在要执行的 for 循环中为 '<='。例如

HTML 在您的代码中添加下一行:

<input type="number" id="userAmount" />

Javascript:

function calculaMediaFinal () {
    var soma = 0;
    var amount = parseInt(document.getElementById("userAmount").value);
    for(var i = 1; i<=amount; i++) { 
        soma += parseInt(document.getElementById('resultado' + i).value, 10); 
    }
    var media = soma / amount;

    var inputCuboMedia = document.getElementById('ConcretizaObj');
    inputCuboMedia.value = parseInt(media, 10);
    }

    function ContarObjetivos(){
        let contador = 0;
            if(document.getElementById('resultado' + i).value) {
                contador++;
            }
    }

你可以这样做。

  • 创建 input 元素并让用户将每个数字传递给它,以 space
  • 分隔
  • 创建 button 将触发计算平均值的代码
  • 创建将存储结果的元素

执行实际计算

  • 获取输入字段的值,将其拆分为 space ' ',使用 trim
  • 移除每个单独数字周围的白色 space
  • 使用reduce
  • 对上一步创建的数组求和
  • 将总和除以提供的数字数量

const input = document.querySelector('input');
const btn = document.querySelector('button');
const res = document.querySelector('p > span');

function getAverage() {
  const values = input.value.split(' ').map(v => v.trim());
  const sum = values.reduce((acc, v) => acc + Number(v), 0);
  res.textContent = (sum / values.length);
}

// 1 2 3 4 5 6 7 8 9 10
btn.addEventListener('click', getAverage);
<input type='text' />
<button>get average</button>
<p>result: <span></span></p>

你把数字一个一个输入输入框,用space隔开(试试输入1 2 3 4 5 6 7 8 9 10),然后点击按钮进行计算,然后显示在span元素.

你的循环没有执行:

  • for中,第二个参数是执行迭代的条件(true = execute)。将 > 更改为 <= 使其工作。
  • 我还合并了你的两个函数,所以一个未填充的input不算。

这是一个工作片段,其中我使用了您的所有代码:

// Merged both function:
function calculaMediaFinal() {
  let soma = 0;
  let contador = 0;
  for (var i = 1; i <= 5; i++) { // Changed > to <= here
    if (document.getElementById('resultado' + i).value) {
      soma += parseInt(document.getElementById('resultado' + i).value, 10);
      contador++;
    }
  }
  var media = soma / contador;
  var inputCuboMedia = document.getElementById('ConcretizaObj');
  inputCuboMedia.value = parseInt(media, 10);
}
<input id="resultado1"><br>
<input id="resultado2"><br>
<input id="resultado3"><br>
<input id="resultado4"><br>
<input id="resultado5"><br>
<button onclick="calculaMediaFinal();">calcula</button>
<br> Media:
<input id="ConcretizaObj">


⋅ ⋅ ⋅

如果你不需要在parseInt函数中指定"base",我也建议你使用一元+运算符:

// Merged both function:
function calculaMediaFinal() {
  let soma = 0;
  let contador = 0;
  for (var i = 1; i <= 5; i++) { // Changed > to <= here
    if (document.getElementById('resultado' + i).value) {
      soma += +document.getElementById('resultado' + i).value;
      contador++;
    }
  }
  var media = soma / contador;
  document.getElementById('ConcretizaObj').value = media;
}
<input id="resultado1"><br>
<input id="resultado2"><br>
<input id="resultado3"><br>
<input id="resultado4"><br>
<input id="resultado5"><br>
<button onclick="calculaMediaFinal();">calcula</button>
<br> Media:
<input id="ConcretizaObj">

希望对您有所帮助。