es-toolkit 的 meanBy 函数:按取值函数计算数组平均值的完整指南

发布时间:2026/11/11 22:53:47

es-toolkit 的 meanBy 函数:按取值函数计算数组平均值的完整指南 es-toolkit 的 meanBy 函数按取值函数计算数组平均值的完整指南【免费下载链接】es-toolkitA modern JavaScript utility library thats 2-3 times faster and up to 97% smaller, a major upgrade to lodash.项目地址: https://gitcode.com/GitHub_Trending/es/es-toolkitmeanBy是 es-toolkit 数学模块中用于先映射、再求平均的高阶聚合函数它对数组的每个元素应用getValue函数将元素转换为数值再计算这些数值的平均值。当需要从对象数组中提取某个属性求均值、或对元素做变换后再求均值时meanBy比手动reduce更简洁直观。读完本文你将掌握meanBy的调用方式、参数语义、空数组的NaN边界行为、底层实现原理以及它与mean、sumBy和 lodash 兼容版本之间的关系。meanBy 是什么meanBy的定义与mean一脉相承mean直接对数值数组求平均而meanBy允许你传入一个取值函数将任意类型T的数组元素映射为number后再求平均。const average meanBy(items, getValue);它的核心签名如下function meanByT(items: readonly T[], getValue: (element: T) number): number;items任意类型的只读数组元素类型为TgetValue从每个元素中提取数值的回调函数返回值getValue计算出的所有数值的平均值若数组为空则返回NaN。典型的使用场景包括从对象数组中计算某个数值属性的平均值如平均年龄、平均分数对元素做变换后再求平均值如字符串的平均长度在统计、报表、图表数据预处理中批量计算聚合指标。使用方法导入方式与 es-toolkit 其他数学函数一致import { meanBy } from es-toolkit/math;计算对象数组特定属性的平均值// オブジェクト配列から特定のプロパティの平均を計算します const people [{ age: 23 }, { age: 25 }, { age: 27 }]; const averageAge meanBy(people, person person.age); // averageAgeは25になります ((23 25 27) / 3 75 / 3 25)getValue逐个取出person.age得到[23, 25, 27]平均值为25。这一模式等价于people.reduce((sum, p) sum p.age, 0) / people.length但语义更聚焦于求平均本身。计算字符串长度的平均值// 文字列の長さの平均を計算します const words [apple, banana, cherry]; const averageLength meanBy(words, word word.length); // averageLengthは約5.67になります ((5 6 6) / 3 ≈ 5.67)这里元素类型T是stringgetValue将每个单词映射为其长度得到(5 6 6) / 3 ≈ 5.67。空数组返回 NaN// 空の配列の場合はNaNを返します const emptyResult meanBy([], x x); // emptyResultはNaNになりますmeanBy对空数组返回NaN这一点与mean一致而与sumBy不同sumBy对空数组返回0。使用时应先判断数组是否为空或接受NaN作为无数据的信号。参数与返回值项目说明itemsreadonly T[]参与平均计算的数组getValue(element: T) number从每个元素中提取数值的函数返回值number按getValue计算出的所有数值的平均值空数组返回NaN源码实现基于 sumBy 的组合meanBy的实现非常精简完整源码位于 src/math/meanBy.tsimport { sumBy } from ./sumBy; export function meanByT(items: readonly T[], getValue: (element: T) number): number { return sumBy(items, item getValue(item)) / items.length; }从源码结构可以看出两个关键实现事实它建立在sumBy之上先用sumBy对每个元素应用getValue并累加再除以items.length。sumBy的实现位于 src/math/sumBy.ts内部是一个普通for循环累加没有使用reduce从而避免了额外的函数调用开销export function sumByT(items: readonly T[], getValue: (element: T, index: number) number): number { let result 0; for (let i 0; i items.length; i) { result getValue(items[i], i); } return result; }注意sumBy的getValue回调会收到第二个参数index从 0 开始而meanBy在转发时只传了元素本身因此meanBy的getValue仅接收元素一个参数。空数组的NaN源自除以零当items为空时sumBy返回0而0 / 0在 JavaScript 中结果为NaN这与 src/math/mean.ts 中mean的实现sum(nums) / nums.length保持完全一致的行为。也就是说空数组返回NaN并非显式判断而是0 / 0的自然结果。测试用例验证仓库为meanBy提供了单元测试见 src/math/meanBy.spec.tsdescribe(meanBy, () { it(calculates the mean of values extracted from objects, () { const result meanBy([{ a: 1 }, { a: 2 }, { a: 3 }], x x.a); expect(result).toEqual(2); }); it(returns NaN for empty arrays, () { type Person { name: string; age: number }; const people: Person[] []; expect(meanBy(people, x x.age)).toEqual(NaN); }); });两个用例分别验证了对象属性求均值与空数组返回NaN这两个文档承诺的核心行为与官方文档描述一一对应可以作为使用时的行为契约参考。meanBy 与 mean、sumBy 的关系es-toolkit 的数学模块导出清单见 src/math/index.ts中这三个函数形成了清晰的层次函数输入空数组行为定位meanreadonly number[]NaN直接对数值数组求平均meanByreadonly T[] 取值函数NaN映射后再求平均sumByreadonly T[] 取值函数0映射后求和meanBy的底层依赖因此若你的数据已经是数值数组直接用mean即可若需要先提取或变换属性则用meanBy若只需要总和而不需要平均值应选择sumBy空数组时返回0而不是NaN在累加场景中更友好。lodash 兼容版 meanByes-toolkit 还在es-toolkit/compat入口下提供了与 lodash 行为对齐的兼容版本实现位于 src/compat/math/meanBy.ts其iteratee参数支持更丰富的简写形式传入函数从元素中提取数值如x x.a传入字符串键名按属性路径取值如a传入数组[key, value]匹配具有指定键值对的元素传入对象匹配包含指定属性的元素不传iteratee时默认使用identity直接对元素本身求平均此时行为等同于对数值数组求mean。该版本还放宽了输入类型接受ArrayLikeT | null | undefined并对缺失属性做了特殊处理当某个元素的属性缺失或为undefined时按0计入分子但仍计入分母即数组长度例如meanBy([{ a: 1 }, {}], a)的结果是0.5若所有值都为undefined则结果仍为NaN。对应的行为测试见 src/compat/math/meanBy.spec.ts其中还覆盖了类数组对象{ 0: {...}, 1: {}, length: 2 }等边界输入。核心的meanBy非兼容版通过 src/math/index.ts 导出并随es-toolkit/math子路径对外提供兼容版则通过es-toolkit/compat入口提供便于从 lodash 迁移的代码无缝替换。使用建议与注意事项空数组处理meanBy对空数组返回NaN。在统计报表等场景中建议先判断items.length 0再决定展示占位值还是直接展示NaN。回调应返回 numbergetValue的返回值会被直接累加请确保它总是返回数值返回undefined、字符串等类型会得到不符合预期的结果。与sumBy搭配如果你同时需要总和与平均值可以基于一次sumBy的结果自行除以长度避免对同一数组遍历两次。从 lodash 迁移若你的代码原先依赖 lodash 的meanBy简写语法如meanBy(objects, a)应改用es-toolkit/compat的兼容版本标准es-toolkit/math的meanBy只接受函数形式的取值器。延伸阅读meanBy 源码 与 meanBy 单元测试mean 源码数值数组直接求平均sumBy 源码meanBy的底层求和实现数学模块导出清单meanBy所在的完整数学函数集合compat 版 meanBy 源码支持 lodash 简写语法的兼容实现数学模块英文参考文档 与日文参考文档【免费下载链接】es-toolkitA modern JavaScript utility library thats 2-3 times faster and up to 97% smaller, a major upgrade to lodash.项目地址: https://gitcode.com/GitHub_Trending/es/es-toolkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/11 22:53:46

UR3草莓采摘系统:基于ArUco视觉闭环的ROS真实场景落地实践

简介:本资源是一套面向机器人开发与智能农业交叉领域的ROS实践项目,适用于高校自动化、人工智能及农业工程方向的本科生与研究生,解决草莓采摘场景下的视觉识别、位姿估计与机械臂协同控制等核心问题。压缩包共79个文件,包含24个头…

2026/11/5 8:03:44

古籍OCR前端实现:Vue+OpenCV.js浏览器端全流程处理

简介:本资源是一套基于VueJavaScript实现的古籍文字检测与识别系统完整源码,面向计算机类专业本科生、研究生及初学者,适用于毕业设计、课程设计、大作业及项目立项演示等实践场景。系统采用vue-cli构建,支持本地快速启动与多环境…

2026/11/11 22:53:32

上海金山电工证复审千万别踩坑,电工求职路上的生死线

上海金山电工证复审千万别踩坑,电工求职路上的生死线 急需特种作业证才能上岗找工作,但你有没有发现,现在电工证复审越来越难?尤其是在上海金山地区,很多人因为不了解政策、流程或者被忽悠,结果白白浪费了时间、钱和机会。别让“上海金山电工证复审”成…

2026/11/11 22:53:32

退休可以考电工证吗?郑州报考避坑指南全解析

退休可以考电工证吗?郑州报考避坑指南全解析 你是不是正在为找不到合适的工作发愁?有没有想过, 退休可以考电工证吗 ?别急,别急,这个问题,其实很多人都在问。尤其是在郑州,很多已经退休的人员,希望通过考取电工证重新进入电工行业,或者转行到其他…

2026/11/11 22:53:32

如何考澳洲的电工证怎么报名?外省证能不能转过来?

如何考澳洲的电工证怎么报名?外省证能不能转过来? 之前考的证在外省能不能转过来?这是很多已经在本地持证上岗的朋友,或者计划去澳洲发展的朋友最关心的问题。如果你手里拿着的是国内的电工证,想要在澳洲继续从事相关工作,那就得了解清楚如何考澳洲的电…

2026/11/11 22:53:32

山西人社电工证怎么考不怕白交培训费?良心建议全在这了

山西人社电工证怎么考不怕白交培训费?良心建议全在这了 怕考不过白交培训费?别慌,山西人社电工证虽然是个硬门槛,但只要方法对了,一次过没问题。今天从郑州金水区培训机构学员的角度,给你讲讲这证怎么考、怎么避坑,还有最新的政策变化,全是干货,别错…

2026/11/11 22:48:31

建造师职称技工特种工和电工证哪个适合你?多少钱才能报上名?

建造师职称技工特种工和电工证哪个适合你?多少钱才能报上名? 你学历不高怕报不上名?别慌,我见过太多像你一样的学员,从零基础到考下证书,一步步走过来的。今天就用许昌培训机构学员的真实经历,带你搞清楚【建造师职称技工特种工】和电工证到底有什么区…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/11 0:02:26

考低压电工证通过率考试真题与备考技巧

低压电工证通过率高不高?学历不高也能考,值不值得考? 你是不是总听说电工证能帮你找高薪工作,但又担心自己学历不够,考不上?其实,低压电工证考试门槛并没有你想象中那么高,关键是方法对不对。这篇文章就告诉你, 考低压电工证通过率到底有多高 ,…

2026/11/11 0:02:26

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名 你是不是也和我一样,刚毕业就听说低压电工证学时必须达标才能上岗?可一打听,发现报名机构五花八门,价格参差不齐, 不知道去哪报名怕被中介坑…

2026/11/11 20:27:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑