簡體   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