【问题标题】:JavaScript - Trying to figure out why my average sum isn't working?JavaScript - 试图弄清楚为什么我的平均总和不起作用?
【发布时间】:2020-04-17 14:50:50
【问题描述】:

试图找出为什么我的代码块无法计算我的数组的平均值。希望有一双新的眼睛能告诉我为什么它不做数学。 我还可以补充一点,“mark”是一个不包含任何整数的数组,并且数字存储在控制台中,而不是存储在它本身的数组中。我试图让它通过用户输入工作,当用户输入的标记进入输入框并获取存储在控制台中的值时。

function getTotal() {
  let total = 0;
  let count = 0;
  let i = 0;


  for (let i = 0; i < mark.length; i++) {
    total += mark.length[i];
  }
  if (mark[i] !== undefined) {
    //legit value//
    count++;
    total += mark[i];
  }
  let avg = total / count;
  console.log(avg)

}

document.getElementById("result").innerHTML = " The Average is " + total;
document.getElementById("Average").addEventListener("click", getTotal);

【问题讨论】:

  • mark 来自哪里?
  • 您在调用该方法之前设置了 innerHTML.... 并且 total 的范围是该方法。它不会存在于方法之外。
  • 将innerHTML的设置移入方法

标签: javascript arrays average


【解决方案1】:

将数组中的数字相加,然后除以数组的长度。如果数组长度为0,则返回NaN(或抛出错误):

function getAverage(arr) {
  if (!arr.length) return NaN; // handler empty array case
  
  let total = 0;

  for (let i = 0; i < arr.length; i++) {
    total += arr[i];
  }
    
  return total / arr.length;
}

console.log(getAverage([2, 2, 2]));
console.log(getAverage([10, 20, 33]));
console.log(getAverage([]));

当你想在你的代码中使用该方法时,创建一个事件监听器:

document.getElementById("Average").addEventListener("click", function() {
  const average = getAverage(mark);
  document.getElementById("result").innerHTML = " The Average is " + average ;
});

【讨论】:

    【解决方案2】:

    这是一个有效的 sn-p

    function getTotal(mark) {
      let total = 0;
      let count = 0;
      for (let i = 0; i < mark.length; i++) {
        total += mark[i];
        count++;
      }
    
      let avg = total / count;
      console.log(avg)
    
      document.getElementById("result").innerHTML = " The Average is " + avg;
    }
    
    document.getElementById("Average").addEventListener("click", () => {
      getTotal([90, 96, 100, 98])
    });
    <div id="result"></div>
    <button type="button" id="Average">Get Total</button>

    【讨论】:

      【解决方案3】:

      mark.length[i] 应该是 mark[i],if 语句也在你的 for 循环之外,所以它只检查最后一个索引。

      通常当你有一个“get”方法时,你应该返回一些东西。也不确定标记来自哪里,所以我在下面制作了这个 sn-p 来帮助你。

      还有 "document.getElementById("result").innerHTML = " 平均值是 " + total;"应该在函数内部。

      let mark = [1,2,3,4,5]
      
      function getTotal() {
        let items = mark.filter(n => n !== undefined)
        let total = items.reduce((sum, n) => sum + n, 0)
        let average = total / items.length
        document.getElementById("result").innerHTML = " The Average is " + average;
      }
      
      document.getElementById("Average").addEventListener("click", getTotal);
      <buttton id="Average">Get Average</button>
      <div id="result"></div>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多