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

如何將JS數(shù)組中的數(shù)字字符通過(guò)map轉(zhuǎn)為數(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);
        }))

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

我自己想了一下,覺(jué)得是if里的條件不成立,沒(méi)有進(jìn)入if語(yǔ)句直接走else部分了,

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

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

想請(qǐng)教大家兩個(gè)問(wèn)題:

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

因?yàn)槊恳粋€(gè)數(shù)組元素都會(huì)進(jìn)行一下判斷,而在執(zhí)行Number(els)這個(gè)判斷時(shí),其實(shí)已經(jīng)將每一個(gè)數(shù)組元素進(jìn)行了顯式轉(zhuǎn)換。

這個(gè)轉(zhuǎn)換會(huì)導(dǎo)致Number('a')NaN,但是js里面NaN == NaNNaN === NaN都是false啊...所以是沒(méi)有進(jìn)if判斷里面去的,之后又為每一個(gè)元素執(zhí)行了parseInt,出來(lái)以后就是[NaN,NaN,NaN,1,2,3]了。

所以這個(gè)判斷不能對(duì)元素進(jìn)行轉(zhuǎn)換,我下面提供了一個(gè)方案你可以瞧一下:

 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的情況,可以對(duì)上面的進(jìn)行一下改進(jìn):

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

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

2017年8月1日 16:58