demo : 把一个字符串数组中的所有元素 都转换成整型
使用lodash 实现
// lodash 中 数据优先 函数置后
const _ = require("lodash");
const arr = ["23", "8", "10"];
// 写法一
// const res = _.map(arr,(item)=>Number(item).toFixed(0));
// console.log(res);
// [ '23', '8', '10' ]
// 写法二
// const res = _.map(arr,item=>parseInt(item))
// console.log(res);
// [ 23, 8, 10 ]
// 写法三
const res = _.map(arr, parseInt);
console.log(res);
// [ 23, NaN, 2 ]
写法三 打印出来的结果并不是我们期望的,导致这个情况的主要原因是 和 map 的第二个参数 iteratee的入参有关
lodash _map方法在官网的说明:
从上面的概念 可以看出 写法三 .map的执行过程 ->
- ‘23’ parseInt(‘23’,0,[ ‘23’, ‘8’, ‘10’ ])
- ‘8’ parseInt(‘8’,1,[ ‘23’, ‘8’, ‘10’ ])
- ‘10’ parseInt(‘10’,2,[ ‘23’, ‘8’, ‘10’ ])
但是实际上 parseInt 方法是有两个参数的
所以_map方法会出现问题
使用loadsh/fp实现
const fp = require('lodash/fp');
const fpRes = fp.map(parseInt,arr);
console.log(fpRes);
// [ 23, 8, 10 ]
fp模块是函数优先的 并且这个函数只接受一个参数 value 所以没有问题
总结 : 两个map 方法的区别是 iteratee函数接收的参数不一样