Por ejemplo, tengo una matriz como esta. Aquí hay objetos de matriz para la misma fecha y diferentes valores.
[ { "date": "2020-12-31T18:30:00.000Z", "value": 450 }, { "date": "2020-12-31T18:30:00.000Z", "value2": 362 }, { "date": "2020-12-31T18:30:00.000Z", "value3": 699 }, { "date": "2021-03-01T18:30:00.000Z", "value": 269 }, { "date": "2021-03-01T18:30:00.000Z", "value2": 450 }, { "date": "2021-03-02T18:30:00.000Z", "value3": 841 }, { "date": "2021-04-03T18:30:00.000Z", "value": 700 }, ]Quiero hacer una matriz agrupada y fusionada para la fecha como se muestra a continuación. Los diferentes valores con la misma "fecha" se fusionan en un objeto de matriz.
[ { "date": "2020-12-31T18:30:00.000Z", "value": 450, "value2": 362, "value3": 699 }, { "date": "2021-03-01T18:30:00.000Z", "value": 269, "value2": 450 }, { "date": "2021-03-02T18:30:00.000Z", "value3": 841 }, { "date": "2021-04-03T18:30:00.000Z", "value": 700 } ]Puede lograr el resultado de manera eficiente usando Map y reducir
const arr = [ { date: "2020-12-31T18:30:00.000Z", value: 450, }, { date: "2020-12-31T18:30:00.000Z", value2: 362, }, { date: "2020-12-31T18:30:00.000Z", value3: 699, }, { date: "2021-03-01T18:30:00.000Z", value: 269, }, { date: "2021-03-01T18:30:00.000Z", value2: 450, }, { date: "2021-03-02T18:30:00.000Z", value3: 841, }, { date: "2021-04-03T18:30:00.000Z", value: 700, }, ]; const dict = arr.reduce((acc, curr) => { const { date, ...rest } = curr; if (!acc.has(date)) { acc.set(date, curr); } else { const o = acc.get(curr.date); Object.entries(curr).forEach(([k, v]) => (o[k] = v)); } return acc; }, new Map()); const result = [...dict.values()]; console.log(result); /* This is not a part of answer. It is just to give the output full height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }