为了账号安全,请及时绑定邮箱和手机立即绑定

如何将JS数组中的数字字符通过map转为数字?

如何将JS数组中的数字字符通过map转为数字?

MYYA 2019-02-28 13:15:12
  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方法得到数组['a','b','c',1,2,3]但是上边代码在控制台打印出来的数组ass=[NaN,NaN,NaN,1,2,3],我自己想了一下,觉得是if里的条件不成立,没有进入if语句直接走else部分了,但是如果执行下面代码的话,得到的数组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的形式获得数组['a','b','c',1,2,3]代码应该怎么改?
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

因为每一个数组元素都会进行一下判断,而在执行Number(els)这个判断时,其实已经将每一个数组元素进行了显式转换。


这个转换会导致Number('a')为NaN,但是js里面NaN == NaN和NaN === NaN都是false啊...所以是没有进if判断里面去的,之后又为每一个元素执行了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

})

或者为了防止出现0的情况,可以对上面的进行一下改进:


var as = ass.map(function(item) {

    var temp = parseInt(item)

    if (temp === temp) {

        return temp

    } else return item

})

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


查看完整回答
反对 回复 2019-03-02
  • 1 回答
  • 0 关注
  • 1012 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信