如何在 JavaScript 中查找数组的平均值?

2025年4月19日 | 阅读 5 分钟

什么是数组?

在 JavaScript 中,数组是一种数据结构,可以在一个变量中存储多个值。这些值称为元素,可以是任何类型:数字、字符串或对象。数组在处理捕获的知识时可以发挥重要作用,并提供许多内置方法来管理其中的数据。数组中的第一个数字的数字索引为 0。

什么是数组的平均值?

数组的平均值是其数字元素的算术平均值,数组的平均值是通过将所有元素相加,然后将总和除以数组中的元素来获得的。这是数值数据集的一种相当常见的操作。

使用 for 循环

使用 for 循环是在 JavaScript 中计算数组平均值的最简单方法。您可以遍历数组,累加值,然后除以元素的数量。

代码

输出

 
Average of Number is 30   

说明

  • sum 设置为 0,将 索引 k 设置为 0
  • 编写一个 for 循环,只要 k 的值小于数组的长度,就继续将每个元素添加到 sum 中。
  • 每次循环增加 k
  • 通过将 sum 除以数组长度来计算平均值。

使用 while 循环

也可以使用带有条件的 while 循环 来计算平均值,该条件会遍历数组并手动递增索引。

代码

输出

 
Average of Number is 30   

说明

  • sum 设置为 0,并将索引 k 设置为 0
  • 使用 while 循环继续将每个元素添加到 sum,直到 k 等于数组长度。
  • 在每次迭代时递增 k
  • 平均值 = 总和/数组长度。

使用 reduce() 方法

一个内置的数组方法,用于简化诸如累加所有元素之类的操作。首先,它接受一个回调函数和一个初始累加器。

代码

输出

 
Average of Number is 41.666666666666664   

说明

  • 在这里,reduce() 方法会遍历数组的每个元素并将其添加到累加器中。
  • 这是累加器的初始值 (0)。
  • 然后,一旦计算出总和,就将总和结果除以数组的大小,从而得到平均值。

使用 forEach 方法

forEach() 方法会为数组中的每个元素调用一次函数。您也可以使用它来对数组中的数字进行求和。

代码

输出

 
Average of Number is 54.44444444444444   

说明

  • 将 sum 变量初始化为 0。
  • 与上面类似,利用 forEach 方法遍历数组并将值添加到 sum 中。
  • 对最终总和进行迭代,然后将其除以数组长度以找到平均值。

优点

  1. 灵活性: JavaScript 中有不同的方法(例如循环和内置方法)可以根据各种编码风格和需求来计算平均值。
  2. 可读性: reduce() 和 forEach() 等函数提供了简洁易读的代码,但前提是使用者经验丰富。
  3. 可重用性: 计算平均值的函数可以轻松地在其他上下文中重用。
  4. 效率: 在几乎所有现代 JavaScript 引擎中,reduce() 等原生数组方法都经过优化,性能极佳。

缺点

  1. 对初学者的复杂性: reduce() 等内置方法对新手来说可能比 for 循环更复杂。
  2. 错误处理: 如果数组不是严格数字的,则需要放置额外的检查以防止错误。
  3. 大型数组的性能: 这些方法速度很快,但在大型数组中对数字求平均值仍然很重要,因为它会影响性能。
  4. 边缘情况的额外代码: 当数组为空或包含错误值时,需要一些额外的逻辑来避免运行时异常。

常见问题解答 (FAQs)

1. 如果数组为空会怎么样?

如果数组为空,除以其长度 (0) 将会引发除零错误或返回 NaN(非数字)。为了避免这种情况,我们需要在计算平均值之前先检查数组是否为空。

2. 是否可以计算非数字值的数组的平均值?

如果数组中的值不是数字,则您将无法直接计算平均值。您可以过滤掉不符合条件的值,或者构建逻辑来单独处理它们,例如通过将其转换为数字再进行求和。

3. 哪种方法计算平均值最快?

在使用小型数组时,whilereduce 循环的性能差异可以忽略不计。但对于更大的数组,reduce() 通常在现代 JavaScript 引擎中进行了更多优化。您应该测试您的具体情况。

4. 为什么我应该使用 reduce() 或 forEach 而不是循环?

但是,如果您正在寻找一种更复杂的方法来编写代码,请使用 reduce() 或 forEach。如果您已经熟悉 JavaScript 中的数组方法,那么应该使用这些方法。

5. 如何处理包含缺失或无效数据的数组?

如果存在混合的无效或非数字值,则需要使用 filter() 等方法在进行计算之前将其删除。例如,array.filter(Number.isFinite) 确保数组中只剩下数字值。

6. 是否可以计算多维数组的平均值?

是的,但是您必须使用 flat() 或递归逻辑来展平数组。一旦展平,您就可以使用之前的方法来计算平均值。

7. 处理大型数组的最佳实践是什么?

因此,请尽可能优化您的代码,并且不要为大型数组进行不必要的迭代。但是,如果您正在使用 reduce() 等原生方法处理非常大的数据集,则建议进行测试,因为它们通常效率很高。

结论

所有这些方法都展示了 JavaScript 如何让我们轻松灵活地操作数组并执行像这样的常见任务。由于 forEach 的功能,它可以满足您的所有需求,无论您是使用传统循环的用户还是更现代的数组设计模式的拥护者。


下一主题JavaScript 参数