为什么在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
答案 0 :(得分:0)
map()方法创建一个新数组,其结果是在此数组中的每个元素上调用提供的函数。 - 通过MDN
因此,.map()
回调需要返回一个值,否则会将项目映射到undefined
。在return parseInt(e, 10);
中使用function
或使用箭头功能,默认情况下会返回此功能。 (和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',undefined ];
parseInt()期望第一个参数是一个字符串。在普通的JS中,它会尝试转换为字符串,似乎TypeScript可能会处理稍微不同的东西。
要解决这个问题,您可以像这样更新第一张地图的回调:
var u = rx.Observable.interval(400).take(6).map((i) => {
return ['2', 'sdf', '4', '8fj', '6'][i] || '';
});