JavaScript `["1", "2", "3"].map (parseInt)

ane · 2014年02月10日 · 最后由 geraldchen 回复于 2014年03月05日 · 3157 次阅读

["1", "2", "3"].map(parseInt) 一点也没看懂,求人解释

这个应该是想实现这个功能

parse = function(i){
    return parseInt(i);
}
["1", "2", "3"].map(parse)

> [1, 2, 3]

但是输出为什么是 [1, NaN, NaN]..应该和 parseInt 的用法有关吧。。

parseInt 有俩参数。。

这不是那个 javascript 37 道题吗,作者说了 map 会传递两个参数,第二个参数被 parseInt 拿来当进制了。

@xlaok 后面那个可选,用 map 的话一次只有一个传参吧

#3 楼 @detailyang 是的,就是没看懂所以问问

#4 楼 @kai1248 map 难道不是迭代的意思?

map() 返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组. array.map(callback[, thisArg]) callback 函数会被自动传入三个参数:数组元素,元素索引,原数组本身 然后元素索引就被当成了第二个参数,执行了 parseInt("1",0),parseInt("2",1),parseInt("3",2)

#5 楼 @u1378130755

翻译起来就是这样:

["1", "2", "3"].map(function(i, indx, array) {
    parseInt(i, indx);  // indx 当作 radix 传进 parseInt 了
});

parseInt 的 radix 可以参考这里: http://www.w3school.com.cn/js/jsref_parseInt.asp

#8 楼 @saiga #7 楼 @kai1248 那结果怎么会 nan

#9 楼 @u1378130755 radix: 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。 如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以“0x”或“0X”开头,将以 16 为基数。 如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

你在 console 里面试试 parseInt('1', 1) 看看

#8 楼 @saiga ["1", "2", "3"].map(function(i, indx, array) { return parseInt(i, indx); // indx 当作 radix 传进 parseInt 了 });

需要 登录 后方可回复, 如果你还没有账号请 注册新账号