title: Flatten an Observable
body: <p>I'm trying to get the specific <strong><em>Item</em></strong>, for example, <code>{ key: "321" }</code>, from <code>ngrx/store</code> based on route parameter. I got it working like this:</p>
  
  <pre><code>this.route.params
    .map((params: any) =&gt; params.key)
  
    .mergeMap((key: string) =&gt; {
  
      return this.store.select(state =&gt; state.items)
  
        .mergeMap((items: Observable&lt;any[]&gt;) =&gt; items)
  
        // .do(item =&gt; console.log(item, key))
  
        .filter((item: any) =&gt; item.key === key);
    })
    .take(1)
    .subscribe(console.log);
  </code></pre>
  
  <p>where <code>state.items</code> is an array of objects, like: <code>[ {key: "1"}, {key: "2"}, ...]</code> that fills over time.</p>
  
  <p>I'm wondering is there a better/different way to do this? </p>
  
  <p>Also, why do I get same item multiple (<code>state.items.length</code>) times before <code>.take(1)</code>?</p>