【问题标题】:Average of array by using a callback function in Javascript使用Javascript中的回调函数计算数组的平均值
【发布时间】:2018-04-23 04:10:37
【问题描述】:

我在求和并找到数组的平均值时遇到了问题。我不断得到平均值为0。 我真的看不出问题出在哪里:

var a = [10,20,30,40]
var sum = 0
var avg = 0
function sumUP(a) {
   for (var i=0; i<a.length; i++){
      sum += a[i];
      avg = (sum/a.length);
   }
}
function display(avg, callback) {
   document.write("Average of array is " + avg)
   callback(average);   
}
display(avg, sumUP);

提前非常感谢!

【问题讨论】:

  • 您在调用设置它的函数之前显示 avg 的值(并且您在调用中传递的内容存在问题)。

标签: javascript callback sum average


【解决方案1】:

您应该让sumUP 返回计算的平均值,而不是分配给全局变量,以便可以在您的document.write 中使用它。这就是函数的目的之一——封装功能并返回可供其他函数使用的值,而不会产生不必要的副作用。您还需要计算显示它之前 的平均值。 (您在计算它之前显示它,当然它会显示0

您还应该注意不要使用单字母的变量名,这很难理解(不仅对于阅读您的代码的其他人,而且对于您,当您稍后回来时)。

const array = [10, 20, 30, 40];
function sumUP(arr) {
  let sum = 0;
  for (var i = 0; i < arr.length; i++) {
    sum += arr[i];
  }
  const avg = (sum / arr.length);
  return avg;
}
function display(arr, callback) {
  const avg = callback(arr);
  document.write("Average of array is " + avg)
}
display(array, sumUP);

【讨论】:

    【解决方案2】:

    你应该这样写代码。

    function sumUP(a) {
    for (var i=0; i<a.length; i++){
    sum += a[i];
    }
    avg = (sum/a.length);
    }
    

    【讨论】:

      【解决方案3】:

      看看:.reduce()

      const arr = [10, 20, 30, 40]
      
      const sum = arr.reduce((a,b) => a + b , 0)
      
      const avg = sum / arr.length
      
      function display(avg) {
         document.write("Average of array is " + avg)
      }
      
      display(avg);

      【讨论】:

        【解决方案4】:

        您根本不需要将avg 传递给callbackdisplay 函数:

        var a = [10,20,30,40];
        var sum = 0;
        var avg = 0;
        function sumUP() {
          for (var i=0; i<a.length; i++){
            sum += a[i];
            res = (sum/a.length);
          }
        }
        function display(callback) {
          callback();
          document.write("Average of array is: " + res);
        }
        display(sumUP);

        【讨论】:

          【解决方案5】:

          这是您的代码的修复方法。

          var a = [10,20,30,40]
          var sum = 0
          var avg = 0
          function sumUP(a) {
             for (var i=0; i<a.length; i++){
                sum += a[i];
             }
             avg = (sum/a.length);
          }
          function display(callback) {
              callback(a);
              document.write("Average of array is " + avg);
          }
          display(sumUP);
          

          您的代码中的第一个问题是您在文档写入后调用回调函数。它应该在写入结果之前首先调用,因为这些方法有你的逻辑。

          您调用的 avg 不是您声明的全局变量,而是函数正在使用的变量。我在你的参数中删除了它,因为它已经被声明为全局并且不需要传入显示函数。

          我还将avg = (sum/a.length); 排除在 for 循环中,因为它可以计算一次,即当 for 循环完成或得到数字的总和时。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-02-14
            • 2011-12-15
            • 1970-01-01
            相关资源
            最近更新 更多