Necesito descubrir cómo contar una matriz y luego combinar solo las que coinciden.
ejemplo
const info = [ { name: 'John', date:'2022-04-11', type: '2', time: 5.00 }, { name: 'Dave', date:'2022-04-12', type: '3', time: 6.00 }, { name: 'John', date:'2022-04-11', type: '2', time: 2.00 }, { name: 'John', date:'2022-04-15', type: '2', time: 3.00 } ];El resultado esperado debe verificar el mismo tipo, nombre y fecha en el tiempo combinado. y la nueva matriz debería verse así.
Se puede hacer con un forloop, pero me gustaría intentar crear una solución con es6.
Pero estoy un poco inseguro de cómo abordar esto.
const expected = [ { name: 'John', date:'2022-04-11', type: '2', time: 7.00 }, name: 'Dave', date:'2022-04-12', type: '3', time: 6.00 }, name: 'John', date:'2022-04-15', type: '2', time: 3.00 } ];Podrías usar una combinación de .reduce y .find
const info = [ { name: 'John', date:'2022-04-11', type: '2', time: 5.00 }, { name: 'Dave', date:'2022-04-12', type: '3', time: 6.00 }, { name: 'John', date:'2022-04-11', type: '2', time: 2.00 }, { name: 'John', date:'2022-04-15', type: '2', time: 3.00 } ]; const result = info.reduce((acc, x) => { const foundObj = acc.find(y => y.name === x.name && y.date === x.date && y.type === x.type); if (foundObj) { foundObj.time += x.time; } else { acc.push(x); } return acc; }, []); console.log(result)Por ejemplo, podría crear un objeto, donde la clave es una combinación de nombre, fecha, tipo y el valor es tiempo
let grouped = info.reduce((acc, curr) => { let key = `${curr.name}${curr.date}${curr.type}`; if (!acc[key]) { acc[key] = { name: curr.name, date: curr.date, type: curr.type, time: curr.time, }; } else { acc[key].time += curr.time; } return acc; }, {}); let expected = Object.values(grouped);