bugfix> angular > 投稿

注文の配列があり、計算された価格の合計を提供するオブザーバブルを作成します。私はAngular 6を使用しています。

import { map, reduce, isEmpty } from 'rxjs/operators';
import { Observable } from 'rxjs';
  list$: Observable<IOrder[]>;
  total$: Observable<number>;
  empty$: Observable<boolean>;

ngOnInit() {
    this.list$ = this.service.asList.asObservable(); // asList is a BehaviorSubject
    this.empty$ = this.list$.pipe(isEmpty());
    this.total$ = this.list$.pipe(
      map(order => order.price),  // <-- Property 'price' does not exist on type 'IOrder[]'
      reduce((total, price) => total + price, 0)
    );
}

マップ演算子内の「order」は、OrderではなくOrder []です。 私は何を間違えていますか?

回答 1 件
  • Property 'price' does not exist on type 'IOrder[]
    
    

    それは、あなたのobesrvableが要素のストリームを一つずつ返さないことを意味します(そして、あなたがここで期待することです)が、配列全体を一度に-単一の結果が出力されます。 map のInsteed  プロパティに reduce を実行します  すぐにアレイに。

    このようなものになります

      this.total$ = this.list$.pipe(
          map(order => order.reduce((total, price) => total + price, 0),'
        );
    
    

あなたの答え