繁体   English   中英

动态比较两个Arrays.map值

[英]Comparing two Arrays.map values dynamically

我有两个数组第一个数组Deals包含其中有交易清单dealIdbuyerIdsellerId ,而在第二阵列Customer包含一个客户列表,其中有customerIdname 我只想将Deal.sellerIdCustomer.customerId进行比较,并想要显示Customer.name

不要将其与<DealDetail />混淆,它是一个具有sellerName属性的sellerName ,对于这个组件,我需要客户名称值。

交易数组:

this.state.updatedDeals.map(deal => <DealDetail key={deal.id} dealID={deal.id} sellerName={deal.sellerId} buyerName={deal.buyerId} />)

客户数组:

this.state.updatedCustomers.map(customer => <li key={customer.id} > {customer.name} </li>)>

我到底想要什么:

<DealDetail sellerName={deal.sellerId===customer.customerId ? customer.name} : "Unknown" />)

您可以尝试以下类似方法。

this.state.updatedDeals.map(
    (deal) =>
    { 
        const c =   this.state.updatedCustomers.filter(customer=>deal.sellerId===customer.id);
        <DealDetail 
            key={deal.id} 
            dealID={deal.id}        
            sellerName={c.length ==1 ? c[0].name:'unknown'} 
            buyerName={deal.buyerId} 
        />
    }
)
let updatedDeals = [
  {dealId: 10, buyerId: 1, sellerId: 26},
  {dealId: 11, buyerId: 1, sellerId: 26},
  {dealId: 12, buyerId: 1, sellerId: 27},
];

let updatedCustomers = [
  {customerId: 26, customerName: 'Isaac'},
  {customerId: 28, customerName: 'Jane'}
];

let DealDisplay = [];

updatedCustomers.forEach(cust => {
  if(updatedDeals.some(deal => deal.sellerId === cust.customerId)){
    DealDisplay.push(cust);
  }
});

为什么不分离逻辑以提高可维护性和可读性。 您可以将记录作为临时变量提取到单独的数组中。 然后使用变量渲染视图

从Firestore获取的数据:

updatedCustomers[doc.id] = doc.data();

并解决了以上问题:

this.state.updatedDeals.map(deal => (<DealDetail key={deal.id}

         sellerName={this.state.updatedCustomers[deal.sellerId].name}
         buyerName={this.state.updatedCustomers[deal.buyerId].name}

       />))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM