Aquí está el código -
Interfaz -
interface IWEXInterface { readonly Date?: string; "Exec Qty"?: string; readonly Expiry?: string; }Datos -
let data: IWEXInterface[] = [ { Date: "8/30/2021", "Exec Qty": "13", Expiry: "17/09/2021", }, { Date: "8/30/2021", "Exec Qty": "15", Expiry: "17/09/2021", }, { Date: "8/30/2021", "Exec Qty": "13", Expiry: "17/09/2021", }, ];Suma y agrupa los objetos -
const sums = [ ...data .reduce((map, item) => { const { Date: key, "Exec Qty": qty } = item; const prev: IWEXInterface = map.get(key); if (prev) { prev["Exec Qty"]! += Number(qty); } else { map.set(key, Object.assign({}, item)); } return map; }, new Map()) .values(), ]; console.log(sums);La salida -
[ { Date: '8/30/2021', 'Exec Qty': '131513', Expiry: '17/09/2021' } ]¿Cómo puedo convertir la cadena en número?
Salida deseada -
[ { Date: '8/30/2021', 'Exec Qty': 41, Expiry: '17/09/2021' } ].................................................... .................................................... .........
intente reemplazar su código con este, devolverá una cadena pero la correcta.
if (prev) { prev["Exec Qty"]! = (Number(prev["Exec Qty"])+ Number(qty)).toString() } else { map.set(key, Object.assign({}, item)); }Simplemente emita prev["Exec Qty"] al número:
prev["Exec Qty"] = String(Number(prev["Exec Qty"]!) + Number(qty));¿Quizás no usar la abreviatura += ?
prev["Exec Qty"] = Number(prev["Exec Qty"]) + Number(qty);