0

parstInt および isNaN 関数で引数を渡すとエラーが発生する

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()コールバックは値を返す必要があります。それ以外の場合は、アイテムを にマップしますundefinedreturn 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));

中間ステップが必要ない場合は、これをさらに減らして、フィルター関数内で解析することにより 1 つのループを削除できます。

var x = u.filter(r => !isNaN(parseInt(r, 10)));

EDIT これは実際にはTypeScriptの質問であることに気付きました。

このエラーは、Observable のマップに使用する配列が 1 項目短いために発生します。したがって、マップされた配列には次が含まれます。

['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 に答える