0

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

1 回答 1

0

map() 方法创建一个新数组,其结果是对该数组中的每个元素调用提供的函数。– 通过MDN

因此,.map()回调需要返回一个值,否则它会将项目映射到undefined. return parseInt(e, 10);在您的内部使用function或使用箭头函数,默认情况下将返回。(并且始终使用带有 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] || '';
});
于 2016-03-09T11:30:34.997 回答