如何使用 ngrx 将一个可观察数组投影到另一个数组?

How can I project one observable array to another with ngrx?

我有一个组件

export class Test implements OnInit {
  public items: Observable<Item[]>

  constructor(private store: Store<IAppState>)
  
  ngOnInit: void {
    this.items = this.store.pipe(select(selectItems));
  }
}

我的商品是

export interface Item {
  timestamp: Date
}

我想将 timestamp 从 utc 转换为本地。所以我想做类似的事情:

export class Test implements OnInit {
      public items: Observable<Item[]>
    
      constructor(private store: Store<IAppState>)
      
      ngOnInit: void {
        this.items = this.store.pipe(select(selectItems).select(x => new Item { timestamp = new Date(x.timestamp + " UTC") }));
      }
    }

以上语法不是真实的(它基于 C# LINQ)。我正在尝试

export class Test implements OnInit {
      public items: Observable<Item[]>
    
      constructor(private store: Store<IAppState>)
      
      ngOnInit: void {
        this.items = this.store.pipe(map(state => selectItems(state), // something here...));
      }
    }

我卡在了 // something here 部分。

C# LINQ select() 的等价物是 Array.map()

因此,假设您的 selectItems 函数 returns 是一个数组,您可以将 selected 项目“映射”到 Items:

constructor(private store: Store<IAppState>) {}

public ngOnInit: void {
    this.items = this.store.pipe(map(state => {
        const selectedItems = selectItems(state);
        return selectedItems.map(x => new Item(...));
    }));
}