javascript - Angular 7 Gruppindelning av data med hjälp av *ngfor
Just nu har jag data som kommer in på det här sättet i min Angular-applikation
https://stackblitz.com/edit/angular-ymmt4d
Hur kan jag gruppera och ordna data efter delstat och län och visa som tabellen nedan
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
data = [
{ state: 'MN', county: '1', item: 0.297 },
{ state: 'MN', county: '1', item: 0.04 },
{ state: 'CA', county: '2', item: 0.019 },
{ state: 'MN', county: '1', item: 0.0374 },
{ state: 'CA', county: '2', item: 0.037 }
]
} <table >
<tr>
<th>State</th>
<th>County</th>
<th>Item</th>
</tr>
<ng-container *ngFor="let dataitem of data">
<tr>
<td>{{dataitem.state}}</td>
<td>{{dataitem.county}}</td>
<td>{{dataitem.item}}</td>
</tr>
</ng-container>
</table>Svar #1
om du har datan sorterad kan du använda låt i=index och kolla om datan innan är lika med hjälp av en villkorsoperator
<ng-container *ngFor="let dataitem of data;let i=index">
<tr>
<td>{{i>0 && data[i-1].state==dataitem.state?'':dataitem.state}}</td>
<td>{{i>0 && data[i-1].county==dataitem.county?'':dataitem.county}}</td>
<td>{{dataitem.item}}</td>
</tr>
</ng-container>
Svar #2
omvandla dina data till flera arrayer med hjälp av lodash.
https://lodash.com/docs/4.17.11#groupBy
import { groupBy } from 'lodash-es'
const states = groupBy(data, 'state')
i din tabell kan du ha flera tbody
<tbody *ngFor="let state of states">...</tbody>

