demo : 把一个字符串数组中的所有元素 都转换成整型

使用lodash 实现

  1. // lodash 中 数据优先 函数置后
  2. const _ = require("lodash");
  3. const arr = ["23", "8", "10"];
  4. // 写法一
  5. // const res = _.map(arr,(item)=>Number(item).toFixed(0));
  6. // console.log(res);
  7. // [ '23', '8', '10' ]
  8. // 写法二
  9. // const res = _.map(arr,item=>parseInt(item))
  10. // console.log(res);
  11. // [ 23, 8, 10 ]
  12. // 写法三
  13. const res = _.map(arr, parseInt);
  14. console.log(res);
  15. // [ 23, NaN, 2 ]

写法三 打印出来的结果并不是我们期望的,导致这个情况的主要原因是 和 map 的第二个参数 iteratee的入参有关
lodash _map方法在官网的说明:
image.png
从上面的概念 可以看出 写法三
.map的执行过程 ->

  • ‘23’ parseInt(‘23’,0,[ ‘23’, ‘8’, ‘10’ ])
  • ‘8’ parseInt(‘8’,1,[ ‘23’, ‘8’, ‘10’ ])
  • ‘10’ parseInt(‘10’,2,[ ‘23’, ‘8’, ‘10’ ])


但是实际上 parseInt 方法是有两个参数
image.png

所以_map方法会出现问题

使用loadsh/fp实现

  1. const fp = require('lodash/fp');
  2. const fpRes = fp.map(parseInt,arr);
  3. console.log(fpRes);
  4. // [ 23, 8, 10 ]

fp模块是函数优先的 并且这个函数只接受一个参数 value 所以没有问题

总结 : 两个map 方法的区别是 iteratee函数接收的参数不一样