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] || '';
});