Me gustaría tener la matriz en salida usando la matriz de entrada en la función de reducción. Pero no puedo agregar dinámicamente una clave como esta " ${keyOrigin}
": cur.value })
Gracias por tu ayuda ! <3
const input = [{ date: '10/03/40922', origin: 'Angleterre', value: 39 }, { date: '10/03/40922', origin: 'Espagne', value: 60 }, { date: '10/03/40922', origin: 'Argentine', value: 54 }, { date: '10/03/40922', origin: 'Italie', value: 45 }, { date: '10/03/40922', origin: 'Hollande', value: 40 }, { date: '10/03/40922', origin: 'Russie', value: 110 }, { date: '10/03/40922', origin: 'Suisse', value: 87 }, { date: '10/03/40922', origin: 'France', value: 143 }, { date: '11/03/40922', origin: 'Angleterre', value: 39 }, { date: '11/03/40922', origin: 'Espagne', value: 60 }, { date: '11/03/40922', origin: 'Argentine', value: 54 }, { date: '11/03/40922', origin: 'Italie', value: 45 }, { date: '11/03/40922', origin: 'Hollande', value: 40 }, { date: '11/03/40922', origin: 'Russie', value: 110 }, { date: '11/03/40922', origin: 'Suisse', value: 87 }, { date: '11/03/40922', origin: 'France', value: 143 } ]; const output = [{ date: "10/03/40922", Angleterre: 39, Espagne: 60, Argentine: 54, Italie: 45, Hollande: 40, Russie: 110, Suisse: 97, France: 143 }, { date: "11/03/40922", Angleterre: 39, Espagne: 60, Argentine: 54, Italie: 45, Hollande: 40, Russie: 110, Suisse: 97, France: 143 }, ]; const reduceByDate = (array) => { const result = Array.from( array .reduce((acc, cur) => { const key = JSON.stringify(cur.date); const current = acc.get(key) || { date: cur.date }; const keyOrigin = JSON.stringify(cur.origin); return acc.set(key, { ...current, "`${keyOrigin}`": cur.value }); }, new Map()) .values() ); return result; }; console.log(reduceByDate(input))
Querías usar un nombre de propiedad computado
{ ...current, [cur.origin]: cur.value })
tampoco hay necesidad de encadenar, simplificado, estoy seguro de que incluso podría deshacerme del Mapa si pasara un poco más de tiempo:
const reduceByDate = array => [...array .reduce((acc, cur) => { const date = cur.date; const current = acc.get(date) || { date }; return acc.set(date, { ...current, [cur.origin]: cur.value }); }, new Map()) .values()];
const reduceByDate = array => [...array .reduce((acc, cur) => { const date = cur.date; const current = acc.get(date) || { date }; return acc.set(date, { ...current, [cur.origin]: cur.value }); }, new Map()) .values()]; console.log(reduceByDate(input))
<script> const input = [ { date: '10/03/40922', origin: 'Angleterre', value: 39 }, { date: '10/03/40922', origin: 'Espagne', value: 60 }, { date: '10/03/40922', origin: 'Argentine', value: 54 }, { date: '10/03/40922', origin: 'Italie', value: 45 }, { date: '10/03/40922', origin: 'Hollande', value: 40 }, { date: '10/03/40922', origin: 'Russie', value: 110 }, { date: '10/03/40922', origin: 'Suisse', value: 87 }, { date: '10/03/40922', origin: 'France', value: 143 }, { date: '11/03/40922', origin: 'Angleterre', value: 39 }, { date: '11/03/40922', origin: 'Espagne', value: 60 }, { date: '11/03/40922', origin: 'Argentine', value: 54 }, { date: '11/03/40922', origin: 'Italie', value: 45 }, { date: '11/03/40922', origin: 'Hollande', value: 40 }, { date: '11/03/40922', origin: 'Russie', value: 110 }, { date: '11/03/40922', origin: 'Suisse', value: 87 }, { date: '11/03/40922', origin: 'France', value: 143 } ];</script>