使用lodash对数组进行转换时遇到的坑

使用lodash对字符串数组parseInt时,遇到的坑

问题: 有这么一个数组:[‘23’, ‘8’, ‘10’],通过lodash的map方法将字符串转换成数字

const _ = require('lodash')
console.log(_.map(['23', '8', '10'], parseInt))

打印结果:

[ 23, NaN, 2 ]

通过分析,发现lodash的map方法传参顺序是数据优先,函数置后,即先传数组,再传处理函数。并且处理函数的参数有三个,传参顺序是
使用lodash对数组进行转换时遇到的坑_第1张图片
于是我们的上述代码变成了:

parseInt('23', 0, array)
parseInt('8', 1, array)
parseInt('10', 2, array)

而parseInt的参数是:
使用lodash对数组进行转换时遇到的坑_第2张图片
答案一目了然,我们把‘23’转成了10进制,‘8’转成了1进制(所以是NaN),‘10’转成了2进制。

解决办法:使用lodash的fp模块代替
因为fp的map函数只会给它的处理函数一个参数,所以parseInt始终只会传一个参数
使用lodash对数组进行转换时遇到的坑_第3张图片

注意:fp模块的函数是函数优先,数据置后,所以传参时注意顺序

const fp = require('lodash/fp')
console.log(fp.map(parseInt, ['23', '8', '10']))

打印结果:

[ 23, 8, 10 ]

你可能感兴趣的:(前端)