练习中关于map/reduce的问题

本文探讨了使用parseInt和map方法处理字符串数组时遇到的意外结果问题,详细解释了parseInt函数的行为以及map方法如何传递参数,并提供了一种简单有效的解决方案。

引发疑问:

小明希望利用map()把字符串变成整数,他写的代码很简洁:

‘use strict’;

var arr = [‘1’, ‘2’, ‘3’];
var r;
r = arr.map(parseInt);
console.log®;

结果竟然是1, NaN, NaN,小明百思不得其解,请帮他找到原因并修正代码。

提示:参考Array.prototype.map()的文档。

由于map()接收的回调函数可以有3个参数:callback(currentValue, index, array),通常我们仅需要第一个参数,而忽略了传入的后面两个参数。不幸的是,parseInt(string, radix)没有忽略第二个参数,导致实际执行的函数分别是:

parseInt(‘0’, 0); // 0, 按十进制转换

parseInt(‘1’, 1); // NaN, 没有一进制

parseInt(‘2’, 2); // NaN, 按二进制转换不允许出现2

可以改为r = arr.map(Number);,因为Number(value)函数仅接收一个参数。

原因

1、parseInt函数

定义:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt

语法:parseInt(string [ , radix])

参数:

string:要被解析的值。如果参数不是一个字符串,则将其转换为字符串。字符串开头的空白符将会被忽略。

radix:一个2到36之间的整数值,用于指定转换中采用的基数。

    如果省略该参数或者为0,则数字将以 10 为基础来解析。

    如果string以 “0x” 或 “0X” 开头,将以 16 为基数。

    如果string以“0” 开头,在ECMA3中被认为是8进制;但是在ECMA5中已经强制规定此情况默认是10进制

    如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

2 . map方法的三个参数

callback(currentValue, index, array)

分别是item(当前每一项)、index(索引值)、arr(原数组)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值