You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Angular中根据Product的taxId关联合并Tax数据

Angular中关联Product与Tax对象并合并数据结构

需求说明

现有两个数据对象:

  • Product:包含字段 _id、productName、taxId
  • Tax:初始定义包含字段 _id、taxName、taxRate,后续补充为 _id、taxName、igstRate、cgstRate、sgstRate

需要在Angular中通过Product的taxId匹配对应的Tax对象,最终生成包含以下字段的合并对象(税务字段支持嵌套):

_id
productName
taxId
taxName
igstRate
cgstRate
sgstRate

补充代码文件

1. 接口定义

product.ts

export interface Product {
  _id: string
  productName: string
  taxId: string
}

tax.ts

export interface Tax {
  _id: string
  taxName: string
  igstRate: number
  cgstRate: number
  sgstRate: number
}

2. 服务层代码(TaxService)

export class TaxService {
  private productUrl = Url + 'products';
  private taxUrl = Url + 'taxs';

  constructor(private httpClient: HttpClient) {}

  getAllPdt(): Observable<Product[]> {
    return this.httpClient.get<Product[]>(this.productUrl);
  }

  getAllTax(): Observable<Tax[]> {
    return this.httpClient.get<Tax[]>(this.taxUrl);
  }

  getOneTax(id: string): Observable<any> {
    return this.httpClient.get(this.taxUrl + '/find/' + id);
  }
}

3. 已更新的组件代码

import { Component, OnInit } from '@angular/core';
import { TaxService } from '../services/tax.service';
import { Tax } from '../interfaces/tax';
import { Product } from '../interfaces/product';
import { combineLatest } from 'rxjs';

@Component({
  selector: 'app-tax',
  templateUrl: './tax.component.html',
  styleUrls: ['./tax.component.css'],
})
export class TaxComponent implements OnInit {
  taxs: Tax[] = [];
  products: Product[] = [];

  combinedItems : any[] = [];

  constructor(public taxService: TaxService) {}

  ngOnInit(): void {

    combineLatest([
      this.taxService.getAllPdt(),
      this.taxService.getAllTax(),
    ]).subscribe(([pdts, taxes]: [Product[], Tax[]]) => {

      if (taxes && pdts) {
        this.products = pdts;
        this.taxs = taxes;

        this.combinedItems = this.products
          .map((x) => {
            let productProperties = ({
              _id: x._id,
              productName: x.productName,
              taxId: x.taxId,
            } = x);

            let taxItem = taxes.find((z) => z._id == x.taxId);
            if (taxItem) {
              let taxProperties = ({
                taxName: taxItem.taxName,
                igstRate: taxItem.igstRate,
                cgstRate: taxItem.cgstRate,
                sgstRate: taxItem.sgstRate,
              } = taxItem);
              let item = { ...productProperties, ...taxProperties };
              console.log(item);
              return item
            }

            return null;
          })
          .filter((x) => x !== null);
      }
console.log(this.combinedItems)
    });
  }
}

内容的提问来源于stack exchange,提问作者Dasharath Sagar Nariman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:05:54