[阿里巴巴最新面试题----JavaScript中map(parseInt)的问题]

[阿里巴巴最新面试题----JavaScript中map(parseInt)的问题]

问题

在这里插入图片描述

利用map()把字符串变成整数

let arr = [10.18,0,10,25,23];
arr = arr.map(parseInt);
console.log(arr);

Output:
[10, NAN, 2, 2, 11]

原因

map()有三个参数:value, index, array,后两个为可选参数

  • 调用map函数时,三个参数都会传入map内的函数中
  • 在这道题中,parseInt有两个参数,字符串和进制
  • 所以,map会将value和index传入parseInt函数

实际上最终的效果是:

parseInt("10.18", 0);  -> 10
parseInt("0", 1);  -> NAN
parseInt("10", 2);  -> 2
parseInt("25", 3);  -> 2
parseInt("23", 4);  -> 11

想要正确转换的解决办法

  1. Number
let arr = [10.18,0,10,25,23];
console.log(arr.map(Number));
  1. 自定义
let arr = [10.18,0,10,25,23];
console.log(arr.map((value)=>{
    return parseInt(value);
}))

补充:

有关parseInt的radix,当遇到0、undefined或未被指定时,parseInt有如下行为:
1)被转换的字符串起于"0x"/“0X” --> 十六进制转为十进制;
2)被转换的字符串起于"0" --> 八进制或十进制(由解释器决定)转为十进制;
3)被转换字符串起于其他值 --> 十进制转为十进制

猜你喜欢

转载自blog.csdn.net/Twinkle_sone/article/details/107486903