parstInt和isNaN函数的参数出错

时间:2016-03-09 11:05:04

标签: javascript arrays typescript rxjs rxjs5

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

1 个答案:

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