【问题标题】:Error in argument of parstInt and isNaN functionparstInt 和 isNaN 函数的参数错误
【发布时间】:2016-06-23 17:19:22
【问题描述】:

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

【问题讨论】:

  • 不应该是return parseInt(e);吗?
  • 不,它仍然在 e 处出错
  • 这将有助于了解什么错误,特别是因为代码的底部(不使用 rx)appears to be finereturn
  • 错误是 void 类型的参数不能分配给数字

标签: javascript arrays typescript rxjs rxjs5


【解决方案1】:

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

因此,.map() 回调需要返回一个值,否则它会将项目映射到undefined。在function 中使用return parseInt(e, 10); 或使用箭头函数,默认情况下将返回。 (和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] || '';
});

【讨论】:

  • 如果我们不返回为什么它会是未定义的
  • 引用:map() 方法创建一个新数组,其中调用提供的函数的结果在该数组中的每个元素上。因此,如果您的回调没有return 结果,它将变为未定义。
猜你喜欢
  • 2013-05-07
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 2010-12-16
  • 2018-04-22
  • 1970-01-01
相关资源
最近更新 更多