平均问题

时间:2018-06-04 08:45:03

标签: javascript media

我在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的情况下进行平均,但是使用用户想要的结果数量?

3 个答案:

答案 0 :(得分:2)

你可以这样做。

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

执行实际计算

  • 获取输入字段的值,将其拆分为空格' ',使用trim
  • 删除每个单独数字周围的空白区域
  • 使用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>

将数字一个接一个地输入到输入字段中的空格(尝试传递1 2 3 4 5 6 7 8 9 10),然后单击按钮执行计算,然后将在span元素中显示。

答案 1 :(得分:0)

如果我理解你的问题是正确的,你需要这样的东西。创建一个新的数字输入字段,用于存储用户想要的金额。将输入字段的值放在变量中并在代码中使用它?它也可能需要&#39;&lt; =&#39;在要执行的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++;
            }
    }

答案 2 :(得分:0)

您的循环未执行:

  • 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">

希望它有所帮助。