【问题标题】:How do I sum the elements that are greater than 150 in an array?如何对数组中大于 150 的元素求和?
【发布时间】:2020-04-10 13:44:56
【问题描述】:

我正在尝试对数组中大于 150 的所有元素进行平均。我不知道如何让它全部解决并输出正确的数字。有人可以帮忙吗?

   function averageBig(list) {
        var sum = 0;
        for (var i = 0; i < list.length && 150; i++) {
            if (list.length > 1000); {
            sum += list[i]
            }
        }    
        return (sum / list.length); 
    }

【问题讨论】:

  • 请举例说明您的问题。您是在寻找数值大于 150 的元素,还是要忽略数组中的前 150 个元素?
  • 嘿,伊莎贝尔!欢迎来到 StackOverflow。您是否阅读了如何提出一个好问题?如果你不这样做,请阅读它。 :) stackoverflow.com/help/how-to-ask

标签: javascript arrays loops sorting average


【解决方案1】:

这个函数返回大于num的数组元素的总和,然后你可以简单地将它除以arr.length。

function sumGreaterThan(arr, num) {
     return arr.reduce((sum, cur) => {
        if (cur > num) return sum + cur;
        return sum;
     }, 0);
}

【讨论】:

    【解决方案2】:

    对数组中大于150的所有元素进行平均

    1. 使用过滤器提取项目> 150

    2. 使用reduce求和

    3. 计算平均值

    const entries = [10,23,151,200,233,244,299,100,123];
    const filtered = entries.filter(e=>e > 150);
    const sum = filtered => filtered.reduce((a,b) => a + b, 0)
    const average = sum(filtered) / (filtered.length);
    
    console.log(average);

    【讨论】:

      【解决方案3】:
      function averageBig(list) {
          var sum = 0;
          for (var i = 150; i <= list.length; i++) {
              sum += list[i]
          }    
          return (sum / list.length); 
      

      我假设你所说的 150 是从第 150 位及以上开始的数据。

      【讨论】:

      • 这将找到第 152 个元素,因为数组的索引为 0。所以第 150 个元素在索引 149 中,而您只计算索引 151 及以上的元素。
      • 您可以从 i = 150 开始,而不是从 i = 0 开始,并保存 150 次不执行任何操作的循环迭代,并为每次迭代删除 if
      • 都会执行您的建议:)
      【解决方案4】:

      你可以这样做:

      function averageBig(list) {
          let listFiltered = list.filter(element => element > 150);
          var sum = 0;
          for (var i = 0; i < listFiltered.length; i++) {
                  sum += listFiltered[i]
          }    
          return (sum / listFiltered.length);
      }
      

      这会过滤列表以仅获取超过 150 个的元素并将其存储在名为 listFiltered 的变量中。然后循环遍历所有这些值并将其与新的 listFiltered 长度进行比较。如果您尝试根据初始 list 长度对其进行平均,您将使用的长度也包含小于 150 的值,因此会导致结果偏斜。

      【讨论】:

        【解决方案5】:

        平均列表中大于 150 的所有项目。

        function averageBig(list) {
          let sum = 0;
          let items = 0;
          for (let i = 0; i < list.length; i++) {
            if (list[i] > 150) {
              sum += list[i];
              items++;
            }
          }
          return (sum / items);
        }
        
        const numbers = [ 10, 20, 50, 100, 150, 200, 300];
        
        console.log(averageBig(numbers));
        console.log((200 + 300) / 2);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-22
          • 2021-09-01
          相关资源
          最近更新 更多