博客
关于我
从一道坑人的面试题说函数式编程
阅读量: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实现memset函数功能(附完整源码)
    查看>>
    Objective-C实现merge insertion sort合并插入排序算法(附完整源码)
    查看>>
    Objective-C实现merge sort归并排序算法(附完整源码)
    查看>>
    Objective-C实现mergesort归并排序算法(附完整源码)
    查看>>
    Objective-C实现miller rabin米勒-拉宾素性检验算法(附完整源码)
    查看>>
    Objective-C实现Miller-Rabin素性测试程序(附完整源码)
    查看>>
    Objective-C实现Miller-Rabin素性测试程序(附完整源码)
    查看>>
    Objective-C实现MinhashLSH算法(附完整源码)
    查看>>
    Objective-C实现MinHeap最小堆算法(附完整源码)
    查看>>
    Objective-C实现multilayer perceptron classifier多层感知器分类器算法(附完整源码)
    查看>>
    Objective-C实现n body simulationn体模拟算法(附完整源码)
    查看>>
    Objective-C实现naive string search字符串搜索算法(附完整源码)
    查看>>
    Objective-C实现natural sort自然排序算法(附完整源码)
    查看>>
    Objective-C实现nested brackets嵌套括号算法(附完整源码)
    查看>>
    Objective-C实现nevilles method多项式插值算法(附完整源码)
    查看>>
    Objective-C实现newtons second law of motion牛顿第二运动定律算法(附完整源码)
    查看>>
    Objective-C实现newton_raphson牛顿拉夫森算法(附完整源码)
    查看>>
    Objective-C实现NLP中文分词(附完整源码)
    查看>>
    Objective-C实现NLP中文分词(附完整源码)
    查看>>
    Objective-C实现not gate非门算法(附完整源码)
    查看>>