Tengo una serie de objetos como el siguiente:
const data = [{label: 'ABC', id: '1', emp:{empLabel: 'Test1', empId: '12'}}, {label: 'ABC', id: '1', emp:{empLabel: 'Test2', empId: '13'}}, {label: 'DEF', id: '2', emp:{empLabel: 'Test11', empId: '14'}}, {label: 'DEF', id: '2', emp:{empLabel: 'Test12', empId: '15'}}, {label: 'PQR', id: '3', emp:{empLabel: 'Test13', empId: '16'}}, {label: 'XYZ', id: '4', emp:{empLabel: 'Test14', empId: '17'}} ]Estoy tratando de agrupar los datos emp si mi identificación es igual.
Rendimiento esperado:
[ {label: 'ABC', id: '1', emp:[{empLabel: 'Test1', empId: '12'}, {empLabel: 'Test2', empId: '13'}]}, {label: 'DEF', id: '2', emp:[{empLabel: 'Test11', empId: '14'}, {empLabel: 'Test12', empId: '15'}]}, {label: 'PQR', id: '3', emp:{empLabel: 'Test13', empId: '16'}}, {label: 'XYZ', id: '4', emp:{empLabel: 'Test14', empId: '17'}} ]He intentado hacer esto con lodash pero no estoy seguro de cómo proceder después de esto. ¿Alguna ayuda se agradecería?
Mi acercamiento:
result = _.map(data, eachData => { return _.chain(_.flatMap(eachData)) })const _ = require("lodash") let items = [ { label: 'ABC', id: '1', emp: { empLabel: 'Test1', empId: '12' } }, { label: 'ABC', id: '1', emp: { empLabel: 'Test2', empId: '13' } }, { label: 'DEF', id: '2', emp: { empLabel: 'Test11', empId: '14' } }, { label: 'DEF', id: '2', emp: { empLabel: 'Test12', empId: '15' } }, { label: 'PQR', id: '3', emp: { empLabel: 'Test13', empId: '16' } }, { label: 'XYZ', id: '4', emp: { empLabel: 'Test14', empId: '17' } } ] var result = _(items) .groupBy('id') .map(function(items, label) { return { label: label, emp: _.map(items, 'emp') }; }).value(); console.log("result -> ", result)Esto funciona, a menos que esté tratando específicamente de usar lodash:
const result = data.reduce((acc, val) => { const existingGroup = acc.find((group) => val.id === group.id); if(!!existingGroup) { if(existingGroup.emp && Array.isArray(existingGroup.emp)) { existingGroup.emp = [...existingGroup.emp, val.emp]; } else { existingGroup.emp = [existingGroup.emp, val.emp] } } else { acc = [...acc, val]; } return acc; },[]); console.log(result);Intente usar array.filter(). haz algo como
ar = [] let newarr = [] data.map(x => if (ar.indexOf(x)===-1) {newarr.push(x); at.push(x.id))newArr es ahora su matriz.