2017-05-07 9 views
0

私はスペースキーを押すか入力するまで、ユーザーが入力したキーを結合してトークン(単語)を表示します。それはJSでは些細なようですが、rxJsで私はたくさんの方法を試してきました。"keydown"の入力を空白で区切って読む

このくださいとスタート:

const source = Rx.Observable.fromEvent(someDiv, 'keydown') 
//.YOUR_SOL 
.subscribe(w=>{console.log(w)}) 

例えば: ''、 'B'、 'C​​'、SPACE、 ''、 'B' => "ABC"、 "AB"

多くの感謝!

+0

は、あなたが入力し、期待される行動の例を与えることができますか? ユーザーが 'a'、 'b'、 'c'、SPACE、 'a'、 'b'を押すと、期待される出力は何ですか? – ZahiC

+0

'a'、 'b'、 'c'、SPACE、 'a'、 'b' => abc、ab – Muchtar

答えて

0

これを試してみてください:

const keyDown$ = Rx.Observable.fromEvent(document, 'keydown').pluck('key'); 

const isSpaceOrEnter = x => [' ', 'Enter'].includes(x); 

const spaceOrEnter$ = keyDown$.filter(isSpaceOrEnter); 

keyDown$ 
    .filter(x => !isSpaceOrEnter(x)) 
    .buffer(spaceOrEnter$) 
    .map(x => x.join("")) 
    .subscribe(x => console.log(x)); 

あなたがここでそれをテストすることができます。https://jsfiddle.net/abwtf2xu/1/

+0

パーフェクト!ありがとう!今私が押されたすべてのキーに反応する必要がある場合。 .filter(x =>!isSpaceOrEnter(x))の後にスペースまたは入力しない現在のcharがあります。 – Muchtar

関連する問題