typescript - Angular 2 - Sammanfogningar


Jag har två objekt - timmar och kunder.

this.customer = Customers[]
this.hour = Hours[]

I båda objekten har jag fältet customer_id - nu vill jag skapa en ny lista som innehåller detaljerna från timlistan kombinerade med customer_name från kundlistan.

this.hourswithcustomers[] = ?

Hur kan jag slå ihop dessa två objekt/listor till en ny lista för att få följande resultat?

| hour.hour_id | hour.hour_amount | hour.customer_id | customer.customer_name |
| 1            | 500.00           | 99               | microsoft              |
| 2            | 300.00           | 55               | apple                  |
| 3            | 200.00           | 99               | microsoft              |

Svar #1

Det enklaste sättet att slå ihop de två skulle vara en kombination av en karta med customerId -> Customer. Sedan därifrån kan du loopa över timmarna för att fylla hourswithcustomers-objektet.

Kartlägga data:

var customerMap = {};
this.customer.forEach((customer) => {
    customerMap[customer.customer_id] = customer;
})

this.hourswithcustomers = this.hour.map((hour) => {
     return {
         hour: hour,
         customer: customerMap[hour.customer_id]
     };
});

På din vy kan du visa det så här:

<tr *ngFor="let hwc of hourswithcustomers">
    <td>{{hwc.hour.hour_id}}</td>
    <td>{{hwc.hour.hour_amount }}</td>
    <td>{{hwc.hour.customer_id}}</td>
    <td>{{hwc.customer.customer_name}}</td>
</tr>

Svar #2

Jag är inte säker på att detta kommer att fungera, men kanske prova detta:

 <tr *ngFor="let h of hourswithcustomer">
    <td > {{h.hour.hour_id}}</td>
    <td > {{h.hour.hour_amount }}</td>
    <td > {{h.customer.customer_id}}</td>
    <td > {{h.customer.customer_customername}}</td>
</tr>


this.hourswithcustomers = this.hours.map( hour => { 
    return {hour, customer: this.find(c.customerId)}
});

där find() är en metod för att hitta kunden med id. Jag känner inte till din kod, jag kan inte uppfinna hur du hittar den.