博客
关于我
从一道坑人的面试题说函数式编程
阅读量:62 次
发布时间:2019-02-25

本文共 824 字,大约阅读时间需要 2 分钟。

在JavaScript中,map函数将元素和索引作为参数传递给回调函数。因此,当使用parseInt作为回调函数时,元素会被正确转换为数值,而索引会被错误地作为基数传递,导致结果中的NaN值。

问题分析:

  • map函数的工作原理:

    • map函数会将数组中的每个元素依次传递给回调函数。
    • 回调函数会接收两个参数:元素本身和其索引。
  • parseInt函数的参数问题:

    • parseInt函数的第一个参数是要转换的字符串,第二个参数是基数(默认为10)。
    • 当使用['2', '3', '4'].map(parseInt)时,parseInt接收两个参数:元素和索引。
  • 索引作为基数的影响:

    • 元素为'2',索引为0:parseInt('2', 0)返回2。
    • 元素为'3',索引为1:parseInt('3', 1)返回NaN(因为二进制中没有'3')。
    • 元素为'4',索引为2:parseInt('4', 2)返回NaN(因为二进制中没有'4')。
  • 解决方法:

  • 直接处理元素:

    • 仅传递元素给parseInt,忽略索引。可以通过在回调函数中使用num => parseInt(num, 10)来实现。
  • 固定基数:

    • 使用bind方法将基数固定为10。例如,parseInt.bind(null, 10)确保每次调用时基数都是10。
  • 代码示例:

    // 正确处理元素['2', '3', '4'].map(num => parseInt(num, 10)); // [2, 3, 4]// 使用 bind 固定基数const numParser = parseInt.bind(null, 10);['2', '3', '4'].map(num => numParser(num)); // [2, 3, 4]

    总结:

    这个问题的核心在于map函数传递了额外的索引参数到回调函数中,导致了意外的结果。通过正确处理函数参数或固定基数,可以避免这个问题,确保数据被正确转换。

    转载地址:http://rim.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现哥德巴赫猜想(附完整源码)
    查看>>
    Objective-C实现唯一路径问题的动态编程方法的算法(附完整源码)
    查看>>
    Objective-C实现唯一路径问题的回溯方法的算法(附完整源码)
    查看>>
    Objective-C实现四舍五入(附完整源码)
    查看>>
    Objective-C实现四阶龙格库塔法(附完整源码)
    查看>>
    Objective-C实现四阶龙格库塔法(附完整源码)
    查看>>
    Objective-C实现回调实例(附完整源码)
    查看>>
    Objective-C实现图-弗洛伊德FloydWarshall算法(附完整源码)
    查看>>
    Objective-C实现图书借阅系统(附完整源码)
    查看>>
    Objective-C实现图像二维熵的图像信号丢失检测(附完整源码)
    查看>>
    Objective-C实现图像去雾算法(附完整源码)
    查看>>
    Objective-C实现图像灰度变换(附完整源码)
    查看>>
    Objective-C实现图像相似度平均值哈希算法(附完整源码)
    查看>>
    Objective-C实现图像移动(附完整源码)
    查看>>
    Objective-C实现图层混合算法(附完整源码)
    查看>>
    Objective-C实现图片dilation operation扩张操作算法(附完整源码)
    查看>>
    Objective-C实现图片erosion operation侵蚀操作算法(附完整源码)
    查看>>
    Objective-C实现图片的放大缩小(附完整源码)
    查看>>
    Objective-C实现图片腐蚀(附完整源码)
    查看>>
    Objective-C实现图片膨胀(附完整源码)
    查看>>