tablas page formularios dinamicas change angular typescript1.7

page - tablas dinamicas angular 4



¿Cómo agrupar datos en Angular 2? (3)

¿Cómo puedo agrupar datos en Angular 2 con TypeScript? Soy consciente de que esto se hace usando el filtro "agrupar por" en Angular 1.X, pero no obteniendo cómo agrupar datos en Angular 2. Tengo esta matriz:

import {Employee} from ''./employee''; export var employees: Employee[]; employees = [ { id: 1, firstName: "John", lastName: "Sonmez", department: 1, age: 24, address: "24/7, Working hours apartment, Cal. US", contactNumber: "+968546215789" }, { id: 2, firstName: "Mark", lastName: "Seaman", department: 2, age: 25, address: "32-C, Happy apartments, Block-9C, Cal. US", contactNumber: "+968754216984" }, { id: 3, firstName: "Jamie", lastName: "King", department: 3, age: 32, address: "54/II, Glorydale apartment, Cal. US", contactNumber: "+967421896326" }, { id: 5, firstName: "Jacob", lastName: "Ridley", department: 5, age: 24, address: "24/7, Working hours apartment, Cal. US", contactNumber: "+968546215789" }, { id: 6, firstName: "Peter", lastName: "Parker", department: 3, age: 25, address: "32-C, Happy apartments, Block-9C, Cal. US", contactNumber: "+968754216984" }, { id: 7, firstName: "Martin", lastName: "Luther", department: 4, age: 32, address: "54/II, Glorydale apartment, Cal. US", contactNumber: "+967421896326" }, { id: 8, firstName: "Raghav", lastName: "Kumar", department: 1, age: 34, address: "51/C Shivalik, Cal. US", contactNumber: "+967842569842" }, { id: 9, firstName: "Narayan", lastName: "Sonmez", department: 3, age: 24, address: "24/7, Working hours apartment, Cal. US", contactNumber: "+968546215789" }, { id: 10, firstName: "Russell", lastName: "Andre", department: 2, age: 25, address: "32-C, Happy apartments, Block-9C, Cal. US", contactNumber: "+968754216984" }, { id: 11, firstName: "Ramona", lastName: "King", department: 4, age: 32, address: "54/II, Glorydale apartment, Cal. US", contactNumber: "+967421896326" }, { id: 12, firstName: "Andre", lastName: "Russell", department: 1, age: 34, address: "51/C Shivalik, Cal. US", contactNumber: "+967842569842" }, { id: 13, firstName: "Nathan", lastName: "Leon", department: 1, age: 24, address: "24/7, Working hours apartment, Cal. US", contactNumber: "+968546215789" }, { id: 14, firstName: "Brett", lastName: "Lee", department: 5, age: 25, address: "32-C, Happy apartments, Block-9C, Cal. US", contactNumber: "+968754216984" }, { id: 15, firstName: "Tim", lastName: "Cook", department: 2, age: 32, address: "54/II, Glorydale apartment, Cal. US", contactNumber: "+967421896326" }, { id: 16, firstName: "Steve", lastName: "Jobs", department: 5, age: 34, address: "51/C Shivalik, Cal. US", contactNumber: "+967842569842" } ];

y estoy buscando contar a los empleados por departamento, como

El departamento 1 tiene 4 empleados

y así.

Unir la identificación del departamento con el departamento real (para poder obtener el nombre del departamento) es otra historia que necesito descubrir.


Puede usar una tubería personalizada para hacerlo como se describe a continuación:

@Pipe({name: ''groupBy''}) export class GroupByPipe implements PipeTransform { transform(value: Array<any>, field: string): Array<any> { const groupedObj = value.reduce((prev, cur)=> { if(!prev[cur[field]]) { prev[cur[field]] = [cur]; } else { prev[cur[field]].push(cur); } return prev; }, {}); return Object.keys(groupedObj).map(key => ({ key, value: groupedObj[key] })); } }

Y luego en tu plantilla puedes escribir:

<div *ngFor="let item of employees | groupBy:''department''"> Department {{ item.key }} has {{ item.value.length }} employees </div>

Consulte también el plunker correspondiente https://plnkr.co/edit/cLnlH13IH4WAsuRdol4n?p=preview

Espero que te ayude!


Puede usar ngx-pipes https://github.com/danrevah/ngx-pipes#groupby

this.arrayObject = [ {id: 1, elm: ''foo'', value: 0}, {id: 2, elm: ''bar'', value: 1}, {id: 3, elm: ''foo'', value: 2}, {id: 4, elm: ''foo'', value: 2} ]; this.arrayNestedObject = [ {id: 1, prop: { deep: ''foo'' }}, {id: 2, prop: { deep: ''bar'' }}, {id: 3, prop: { deep: ''foo'' }}, {id: 4, prop: { deep: ''bar'' }} ];

<p>{{ arrayObject | groupBy: ''elm'' }}</p> <!-- Output: "{foo: [{id: 1, elm: ''foo'', value: 0}, {id: 3, elm: ''foo'', value: 2}, {id: 4, elm: ''foo'', value: 2}], bar: [{id: 2, elm: ''bar'', value: 1}]}" -->


var dept = employees.map((m) => m.department).filter((f, i, ar) => ar.indexOf(f) === i); console.log(dept); var group = employees.reduce((accumulator, item, i, arr) => { if (dept.length) { var pop = dept.shift(); var list = arr.filter((f) => f.department == pop); accumulator.push(...list); } return accumulator; }, []); console.log(group);