JavaScript高阶函数Map/Reduce学习记录1
题目来源
题目内容
1、题目要求:利用map()把字符串变成整数,代码如下:
2、示例代码测试结果:1,NaN,NaN
3、请找出错误原因并且改正
'use strict';
var arr = ['1', '2', '3'];
var r;
r = arr.map(parseInt);
console.log(r);
错误分析
参考该帖下网友答案:
首先来看一下,Map函数与parseInt函数的参数说明:
parseInt(string, radix) 解析一个字符串并返回指定基数的十进制整数, radix 是2-36之间的整数,表示被解析字符串的基数。(进制信息)
直接在 map() 方法使用,这边的 radix 进制会引用到数组的索引。
map()只要一个参数,即函数对象本身;但是map传递的参数有三个,分别是:element、index,array。
示例代码不成功的原因:
每次送入parseInt()的有3个元素:element, index和array。parseInt本身是有2个参数的:string和radix,所以element和index纳入了函数运算,array被抛弃了。
['1', '2', '3'].map(paresInt)
//相当于
['1', '2', '3'].map(paresInt(value, index))
逐一分析:
第一次:parseInt(1, 0):0 会调用默认 10 进制,因此返回 1。
第二次:parseInt(2, 1):radix 为 1,不在范围内,错误返回 NaN。
第三次:parseInt(3, 2):radix 为 2,在范围内,二进制范围是 0-1超过范围,错误返回 NaN。
参考答案
修改是通过明确定义只有一个元素用于函数计算(element)。
'use strict';
var arr = ['1', '2', '3'];
var r;
r = arr.map(c=>parseInt(c));
console.log(r);
其他总结
1、评论区答案中的 "=>"是什么意思?
> Array.map(x=>x*1):
> /* 相当于先定义function foo(x){
> return x*1;
> }
> 再调用 Array.map(foo); */
> //x*1:是利用纯数字字符与数字相乘,结果为数字的特性,把单个字符转为数字。
本节易错点
1、关于return语句后面;的遗漏。尤其是在return后跟函数括号比较复杂的时候,注意检查。
2、在本知识点的其他示例练习题目中,有用到利用纯数字字符与数字相乘,结果为数字的特性,把单个字符转为数字。第一次作答没有注意到这一点,类型不同没有通过测试。
3、多层嵌套的函数时,一定要注意函数需要有return返回值。在使用Map函数的时候特别要注意。