【问题标题】:Calculate Average in JavaScript when there is missing value缺少值时在 JavaScript 中计算平均值
【发布时间】:2021-10-14 12:13:21
【问题描述】:

我有一排 10 个单元格,用户可以在其中输入值。 我只需要计算那些有价值的单元格的平均值,而忽略没有价值的单元格。 我使用 document.getElementById("demo").value 获取输入,然后将其插入到数组中。 如果缺少值,它会在我不想要的数组中插入 0。

var calcvalue = new array();
for(i = 0; i<10; i++){
   var getObj = document.getElementById('demo'+ i);
   if(getObj.value != ''){
      calcvalue.push(getObj.value);
      break;
  }
}

如何忽略没有任何价值的单元格。

【问题讨论】:

  • 请提供 HTML。
  • 所以,更改 您的代码,以便在缺少值的情况下,不要在数组中插入任何东西 - 等等 - 问题解决了
  • 我正在尝试价值!=''; array.push(值);但在这种情况下它也插入了 0。
  • 是的,这是一个开始.. 但是value !='' 没有做任何有用的事情,除非结果是一个布尔值,如果值不是空字符串则为真 - 你如何处理这个布尔结果?
  • 我明白了,因为你只是在做value != '' 忽略结果,无论前面的代码对推送没有影响,都推送值

标签: javascript html arrays


【解决方案1】:

如果没有看到您的代码,可能有许多不同的原因导致它不适合您。 也许这会让你知道如何解决它:

const form = document.getElementById("test");
form.addEventListener("input", e =>
{
  const array = [];
  for(let i = 0; i < form.length; i++)
  {
    if (form[i].value !== "") //only include fields with value. 0 considered as accepted value
      array.push(Number(form[i].value)); //make sure we insert a number, not string
  }
  document.getElementById("res").textContent = array.length ? array.reduce((a,b)=>a+b) / array.length : "";
});
average: <span id="res"></span>
<form id="test">
  <div><input type="number"></div>
  <div><input type="number"></div>
  <div><input type="number"></div>
  <div><input type="number"></div>
  <div><input type="number"></div>
  <div><input type="number"></div>
  <div><input type="number"></div>
  <div><input type="number"></div>
  <div><input type="number"></div>
  <div><input type="number"></div>
</form>

[编辑] 您的代码在没有break 的情况下工作正常(它应该是new Array(),带有大写“A”)

const form = document.getElementById("test");
form.addEventListener("input", e =>
{
  var calcvalue = new Array();
  for(i = 0; i<10; i++){
     var getObj = document.getElementById('demo'+ i);
     if(getObj.value != ''){
        calcvalue.push(getObj.value);
//        break;
    }
  }
  document.getElementById("res").textContent = JSON.stringify(calcvalue);
});
array: <span id="res"></span>
<form id="test">
  <div><input id="demo0" type="number"></div>
  <div><input id="demo1" type="number"></div>
  <div><input id="demo2" type="number"></div>
  <div><input id="demo3" type="number"></div>
  <div><input id="demo4" type="number"></div>
  <div><input id="demo5" type="number"></div>
  <div><input id="demo6" type="number"></div>
  <div><input id="demo7" type="number"></div>
  <div><input id="demo8" type="number"></div>
  <div><input id="demo9" type="number"></div>
</form>

另请注意,您正在将字符串添加到数组中,因此在平均计算期间,您需要将每个值转换为数字

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2012-06-19
    相关资源
    最近更新 更多