parstInt 和 isNaN 函数的参数错误

Error in argument of parstInt and isNaN function

本文关键字:参数 错误 函数 isNaN parstInt      更新时间:2023-09-26

为什么im在parstInt和isNaN函数中传递参数时出错,说void类型的参数不能分配给类型字符串,我该如何解决这个问题

var u = rx.Observable.interval(400).take(6).map((i)=>{
['2', 'sdf', '4', '8fj', '6'][i]
});
var x = u.map(function(e){ 
parseInt(e);             //error on e
}).filter(r => !isNaN(r)) //error on r

map() 方法创建一个新数组,其中包含在此数组中的每个元素上调用提供的函数的结果。

因此,.map()回调需要返回一个值,否则它将项目映射到undefined。在function中使用return parseInt(e, 10);或使用箭头函数,默认情况下会返回。(并且始终使用带有 parseInt 的基数)

var u = rx.Observable.interval(400).take(6).map((i) => {
    return ['2', 'sdf', '4', '8fj', '6'][i]
});
var x = u.map(e => parseInt(e, 10)).filter(r => !isNaN(r));

如果您不需要中间步骤,则可以进一步减少此步骤,并通过在过滤器函数内解析来删除一个循环。

var x = u.filter(r => !isNaN(parseInt(r, 10)));

编辑我刚刚意识到这实际上是一个打字稿问题。

发生此错误的原因是,用于将可观察对象映射到的数组缺少一个项目。因此,映射的数组将包含:

["2"、"自卫"、"4"、"8FJ"、"6",未定义];

parseInt() 期望第一个参数是一个字符串。在普通JS中,它将尝试转换为字符串,似乎TypeScript可能会处理一些不同的事情。

为了解决这个问题,您可以像这样更新第一个地图的回调:

var u = rx.Observable.interval(400).take(6).map((i) => {
    return ['2', 'sdf', '4', '8fj', '6'][i] || '';
});