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.
