javascript - How to get first element from observable and return an observable for the rest of the stream? -


i'm trying write observable return objects csv file. problem want use header of file, use property names next elements of observer. example, if have csv:

symbol;word 1;one 2;two 3;three 

i want happen:

getobjects().subscribe(o => console.log(o));  // should log this: { symbol: '1', word: 'one' } { symbol: '2', word: 'two' } { symbol: '3', word: 'three' } 

i managed this code:

const rx = require('rxjs/rx'); const _zipobject = require('lodash/zipobject');  const getobjects = () => {     const observable = rx.observable.of(         ['symbol', 'word'],         ['1', 'one'],         ['2', 'two'],         ['3', 'three']     ).share();      let header;      return rx.observable.concat(         observable.first().do(line => header = line).filter(() => false),         observable.skip(1).map(line => _zipobject(header, line))     ); };  getobjects().subscribe(o => console.log(o)); 

it works, doesn't feel nice. thought using filter, filtering first element , setting header, wouldn't feel better, , have disadvantage of having filter callback being called every element.

you can use combinelatest header , date @ same time , avoid accessing parent scope:

const rx = require('rxjs/rx'); const observable = rx.observable;  const getobjects = () => {     const observable = observable.of(         ['symbol', 'word'],         ['1', 'one'],         ['2', 'two'],         ['3', 'three']     ).share();      const header$ = observable.take(1);     const data$ = observable.skip(1);      return observable.combinelatest(header$, data$, (headers, line) => {         const result = {};         headers.foreach((header, i) => {             result[header] = line[i];         });          return result;     }); };  getobjects().subscribe(o => console.log(o));  

this prints:

{ symbol: '1', word: 'one' } { symbol: '2', word: 'two' } { symbol: '3', word: 'three' } 

Comments

Popular posts from this blog

What is happening when Matlab is starting a "parallel pool"? -

angular - DownloadURL return null in below code -

php - Cannot override Laravel Spark authentication with own implementation -