Necesito encontrar a todos los empleados (EmpID) con los mismos proyectos (ProjectID), los datos serán dinámicos, esta matriz es, por ejemplo.
[ { EmpID: '143,', ProjectID: '12,', DateFrom: '2013-11-01,', DateTo: '2014-01-05\r' }, { EmpID: '218,', ProjectID: '10,', DateFrom: '2012-05-16,', DateTo: 'NULL\r' }, { EmpID: '143,', ProjectID: '10,', DateFrom: '2009-01-01,', DateTo: '2011-04-27' }, ];Quiero que esta matriz sea ->
[ { EmpID: '218,', ProjectID: '10,', DateFrom: '2012-05-16,', DateTo: 'NULL\r' }, { EmpID: '143,', ProjectID: '10,', DateFrom: '2009-01-01,', DateTo: '2011-04-27' }, ];Prueba algo como esto:
const projectEmployees = employees.filter( emp => emp.ProjectID === '12' ); Ver Array.filter() para los detalles sangrientos.
O... rueda el tuyo:
function selectEmployeesByProjectId( employees, id ) { let projectEmployees = []; for ( const emp of employees ) { if ( emp.ProjectID === id ) { projectEmployees.push(emp); } } return projectEmployees; }Si sus datos son realmente dinámicos y no conoce su verdadera forma, aparte de una lista de objetos, simplemente haga que su función sea flexible, algo como lo siguiente. [Pero aún necesitará saber con qué propiedad o propiedades comparar para hacer su filtrado.
function selectMatchingObjects( listOfObjects, isWanted ) { return listOfObjects.filter( isWanted ); } donde isWanted es una función que acepta un objeto y devuelve un valor booleano true si el objeto debe conservarse, o false si el objeto debe descartarse.
Una vez que tengas eso, puedes hacer algo como
function selectEmployeesByProject( employees , projectIdKey , projectId ) { const isWanted = emp = emp[projectIdKey] === projectId; return employees.filter( isWanted ); }Y entonces
const employees = getMySomeDynamicEmployees(); . . . const projectEmployees = selectEmployeesByProject(employees, 'ProjectId', '10');Debería poder usar Array.reduce para lograr esto
// The "trick" is to pull out the first item and then use that as the match candidate const [head, ...tail] = [{ EmpId: 1 }, { EmpId: 2 }, { EmpId: 1 }] const output = tail.reduce( (acc, b) => { if (acc.map(o => o.EmpId).includes(b.EmpId)) { acc.push(b) } return acc }, [head] )