map()方法定义在JavaScript的Array中,他是一个高阶函数。我们向这个函数传入我们自己定义的回调函数(callback),然后map会对数组当中每一个元素去调用回调函数。
通常,我们只在回调函数里用一个参数,因为大多数回调函数只需要一个参数,或者一个必须参数和多个可选参数。这样的习惯会有时导致很诡异的行为。
['1', '2', '3'].map(parseInt); //[1, NaN, NaN]
我们所希望看到的结果其实是[1, 2, 3],原因是parseInt一般我们用的时候都是习惯性用一个参数,但他可以接收两个参数,第二个参数用来做基数。而map向回调函数传参有三个,数组中的元素,元素的下标和这个数组。第三个参数被parseInt忽略掉,前两个参数被接收。
parseInt('0', 0); //基数为0,或者undefined,用10进制
parseInt('1', 1); //没有1进制,返回NaN
parseInt('2', 2); //二进制不能出现2,返回NaN
这里关键是要知道回调函数接收的参数有三个,那么如何解决上面的问题呢?
function myParseInt(intString){
return parseInt(intString, 10);
}
['1', '2'].map(myParseInt);
或者,用更简单的写法
['1', '2'].map(str => parseInt(str));
或者,最简单的写法
['1', '2'].map(Number)