Hola chicos, después de hacer varias transformaciones, tengo esta matriz de objetos:
Necesito una función dinámica que me permita crear el siguiente objeto, donde data[i] será la suma de los valores de data[i] del objeto anterior.
debido a que usa angular, puede transformar su respuesta de datos en una clase/interfaz. Todo tu json es una lista de "Artículos"
export interface Item { name: string, data: number[] } // let rows: Item[] = your_jsonluego, puede crear su totalItem como:
suponiendo que toda su matriz de datos tenga la misma longitud:
const rowValues = rows.map(x => x.data); // using first row of your array, you can map results for each column of your matrix (rowValues is a matrix), // then, iterating each row, you add the sum of specified column index const values = rowValues[0].map((x, i) => { let sum = 0; rowValues.forEach(r => sum += r[i]); return sum; }); const totalObj = { name: 'Total', data: values };No es la mejor solución, pero creo que está funcionando.
Aquí hay una solución para su problema dentro de dos estructuras de bucle
let rowData = [ { "name": "TEST1", "data": [ 1, 2 ] }, { "name": "TEST2", "data": [ 1, 2 ] }, { "name": "TEST3", "data": [ 1, 2 ] } ] var result = Array(rowData.length ? rowData[0].data.length : 0).fill(0) rowData.map(ele=>ele.data?.map((e,idx)=>result[idx]+=e || 0)) var output = {"name":"Total","data":result}; console.log(output)