parstInt 和 isNaN 函数的参数错误

Error in argument of parstInt and isNaN function

为什么我在 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

The map() method creates a new array with the results of calling a provided function on every element in this array. – via MDN

因此,.map() 回调要求对值进行 returned,否则会将项目映射到 undefined。在 function 中使用 return parseInt(e, 10); 或使用箭头函数,默认情况下会 return 。 (和 always use a radix with 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)));

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

发生错误是因为您用来映射 Observable 的数组少了一项。因此映射数组将包含:

['2', 'sdf', '4', '8fj', '6', 未定义];

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

要同时解决这个问题,您可以像这样更新您的第一张地图的回调:

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