Lodash中_.ary函数的作用是什么?有无更简便替代写法?
Lodash
_.ary 函数作用及替代写法解析 一、_.ary 的核心作用
_.ary(func, n) 是用来限制目标函数接收的参数数量的工具函数:它会返回一个新函数,这个新函数在调用时只会把前 n 个参数传给原函数,自动忽略后续多余的参数。
二、官方示例的原理
官方给出的示例:
_.map(['6', '8', '10'], _.ary(parseInt, 1));
之所以需要用 _.ary,是因为数组的 map 方法会给回调函数传入三个参数:当前元素值、当前索引、原数组本身。而 parseInt 的第二个参数是进制数(radix),如果直接把 parseInt 传给 map:
['6', '8', '10'].map(parseInt);
会得到错误结果:
[6, NaN, 2]
原因是:
- 第一个元素:
parseInt('6', 0)→ 进制0默认使用十进制,结果6 - 第二个元素:
parseInt('8', 1)→ 进制1不存在,返回NaN - 第三个元素:
parseInt('10', 2)→ 二进制转十进制,结果2
用 _.ary(parseInt, 1) 后,强制 parseInt 只接收第一个参数(元素值),忽略后续的索引和数组,最终得到正确的 [6, 8, 10]。
三、关于箭头函数的替代写法
你提到的不依赖Lodash的写法:
['6', '8', '10'].map(x => parseInt(x))
确实能达到同样的效果,而且写法更简便、不需要额外依赖库。
因为箭头函数只显式传递了第一个参数 x 给 parseInt,此时 parseInt 的第二个参数(radix)未被传入,会默认使用十进制解析,所以能得到正确结果。
内容的提问来源于stack exchange,提问作者Daniel Schilling
相关产品推荐
相关产品推荐

