![](/img/trans.png)
[英]Build In prototype functions like Array.map, Array.filter VS _.map, _.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)
對於第一次調用, base
是index
0
。 這樣可以正常工作,因為ECMAScript定義base=0
與省略參數相同,因此允許十進制,八進制或十六進制(在這種情況下使用十進制)。
對於第二個和第三個項目, base
為1
或2
。 它嘗試將數字解析為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可以滿足您的需求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.