在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/網(wǎng)絡安全  HTML/ 如何將JS數(shù)組中的數(shù)字字符通過map轉為數(shù)字?

如何將JS數(shù)組中的數(shù)字字符通過map轉為數(shù)字?

    var ass=['a','b','c','1','2','3']
    console.log(ass,ass.map(function(els){
        if(Number(els)==NaN){
            return els;
        }
            return parseInt(els);
        }))

我想通過上面的map方法得到數(shù)組['a','b','c',1,2,3]但是上邊代碼在控制臺打印出來的數(shù)組ass=[NaN,NaN,NaN,1,2,3],

我自己想了一下,覺得是if里的條件不成立,沒有進入if語句直接走else部分了,

但是如果執(zhí)行下面代碼的話,得到的數(shù)組ass=['1','2','3']所以if語句應該是有效的,返回的false.

    console.log(ass,ass.filter(function(els){
        if(Number(els)==NaN){
            return els;
        }
            return parseInt(els);
        }))

想請教大家兩個問題:

    1: if(Number(els)==NaN){
        return els;}
        這個if語句怎么理解。
    2: 如果通過map的形式獲得數(shù)組['a','b','c',1,2,3]代碼應該怎么改?
回答
編輯回答
故人嘆

因為每一個數(shù)組元素都會進行一下判斷,而在執(zhí)行Number(els)這個判斷時,其實已經(jīng)將每一個數(shù)組元素進行了顯式轉換。

這個轉換會導致Number('a')NaN,但是js里面NaN == NaNNaN === NaN都是false啊...所以是沒有進if判斷里面去的,之后又為每一個元素執(zhí)行了parseInt,出來以后就是[NaN,NaN,NaN,1,2,3]了。

所以這個判斷不能對元素進行轉換,我下面提供了一個方案你可以瞧一下:

 var ass=['a','b','c','1','2','3']
var as = ass.map(function(item) {
    var temp = parseInt(item)
    if (temp) {
        return temp
    } else return item
})

或者為了防止出現(xiàn)0的情況,可以對上面的進行一下改進:

var as = ass.map(function(item) {
    var temp = parseInt(item)
    if (temp === temp) {
        return temp
    } else return item
})

利用了NaN不等于其自身的特性。

2017年8月1日 16:58