繁体   English   中英

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

[英]JavaScript 1.6 Array.map() and Array.filter() not working with built in functions as arguments

这很好用:

["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(binary)。 由于字符串中的第一个数字是这些基数中不存在的数字,因此您将获得NaN

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

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

问题是map期望回调应该是一个接受三个参数的函数, callbackfn(value, index, array)

第二个参数与parseInt(string, radix)函数的radix参数发生冲突。

映射为每个元素调用parseInt:

parseInt("655971",0); // 655971
parseInt("2343", 1);  // NaN
parseInt("343", 2);   // NaN

第一个是有效的,因为如果radix未定义或为0,则假定为10。

Array.Filter接受一个函数,该函数返回信息,无论要评估的项是否满足条件。 IsNumeric可以满足您的需求。

http://www.hunlock.com/blogs/Mastering_Javascript_Arrays

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM