JavaScript自定义实现_.map时回调函数为何需传入3个参数
为什么标准
_.map要给回调传三个参数 核心原因是为了覆盖更丰富的开发场景,同时和原生数组方法的设计保持对齐,具体可以拆成几点来说:
- 首先你的简化写法能跑,是因为JS本身支持函数调用时传入比形参更多的参数,多余参数会被自动忽略,所以当你只用到第一个参数「当前元素」时,传三个还是传一个都不影响执行,但这不代表另外两个参数没用。
- 第二个参数「索引」是高频常用参数,很多场景都需要用到,比如你需要给列表元素拼接序号、根据索引做差异化处理、关联元素位置逻辑的时候,都离不开索引。举个实际用例:
这种场景下如果map不返回索引,你就得额外在外层声明变量计数,麻烦很多。// 给水果列表加上序号 const fruitList = ['苹果', '香蕉', '橙子'] const numberedList = _.map(fruitList, (val, index) => `${index + 1}. ${val}`) // 输出:['1. 苹果', '2. 香蕉', '3. 橙子'] - 第三个参数「原数组」主要用于需要在回调内部引用原数组做判断、计算的场景,不需要额外在外层存储原数组变量,代码更简洁。比如:
// 标记数组中大于平均值的元素 const scoreList = [60, 78, 82, 91, 55] const higherThanAvg = _.map(scoreList, (val, _, list) => { const avg = list.reduce((sum, curr) => sum + curr, 0) / list.length return val > avg }) // 输出:[false, false, true, true, false] - 另外这个三参数的设计和JS原生
Array.prototype.map完全对齐,不管你用原生方法还是lodash的工具方法,用法逻辑都是一致的,降低开发者的学习和切换成本。
内容的提问来源于stack exchange,提问作者Anmol Pandita
相关产品推荐
相关产品推荐

