JavaScript 1.6 Array.map() 和 Array.filter() 不使用内置函数作为参数

标签 javascript arrays

这很好用:

["655971", "2343", "343"].map(function(x) { return parseInt(x) }) // [655971, 2343, 343]

但这不是:

["655971", "2343", "343"].map(parseInt) // [655971, NaN, NaN]

Array.filter() 也是如此

我在这里错过了什么?

最佳答案

这是因为 map 向回调函数传递的参数不仅仅是数组项。你得到:

callback(item, index, array)

通常你的函数会忽略它不需要的参数。但是 parseInt 接受一个可选的第二个参数:

parseInt(string, base)

对于第一次调用,baseindex 0。这没问题,因为 ECMAScript 定义 base=0 与省略参数相同,因此允许十进制、八进制或十六进制(在这种情况下使用十进制)。

对于第二项和第三项,base12。它试图将数字解析为 base-1(不存在)或 base-2(二进制)。由于字符串中的第一个数字是这些基数中不存在的数字,因此您得到一个 NaN

一般来说,没有基础的 parseInt 无论如何都是有问题的,所以你可能想要:

["655971", "2343", "343"].map(function(x) { return parseInt(x, 10) })

关于JavaScript 1.6 Array.map() 和 Array.filter() 不使用内置函数作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2647798/

相关文章:

javascript - JS CANVAS - 到达目标位置时圆圈速度减慢

javascript - ng-model 进入文本区域不会更新

javascript - 在网站中显示 Google map 时出错

PHP Foreach 如果数组最后

c - 在数组的这个索引中减去有什么意义?

php - 将整个 mySQL 表加载到 PHP 数组中

c++ - 获取大的负数打印数组

javascript - 从服务器加载已经存在的 HTML 文件而不是浏览器缓存

javascript - 用 javascript 替换 ÅÄÖ(大写和小写)

arrays - 集合的完全和部分匹配