tutorial read array agrupar javascript arrays d3.js nested sum

read - group elements array javascript



MĂșltiples sumas de objeto de manera eficiente d3.js (2)

Necesitas más bucles para obtener el resultado.

Básicamente, la matriz externa, luego iterar la list y usar otra matriz para las claves. Luego recopile todos los datos y devuelva un nuevo objeto con una nueva estructura.

var array = [{ id: "AL01", list: [{ speed: 5, value: 10 }, { speed: 7, value: 15 }] }, { id: "AB01", list: [{ speed: 20, value: 1 }, { speed: 8, value: 10 }] }], result = array.map(function (a) { var temp = { id: a.id, speed: 0, value: 0 }; a.list.forEach(function (b) { [''speed'', ''value''].forEach(function (k) { temp[k] += b[k]; }); }); return temp; }); console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

Tengo un objeto como:

{ [ { id: "AL01", list: [ { speed : 5 value : 10} , { speed : 7 value : 15} ] }, { id: "AB01", list: [ { speed : 20 value : 1} , { speed : 8 value : 10} ] } ] }

y me gustaría tener este resultado como:

{[ { id: "AL01", speed: 12, value: 25}, { id: "AB01", speed: 28, value: 11}]}

¿Cómo puedo obtener esto de manera eficiente? ¿Si es posible ejecutar solo una vez las funciones map o forEach? Me pregunto algo que pasa solo una vez por cada objeto.


Su estructura de datos no es correcta. Debe tener una propiedad para la matriz más externa en el objeto de datos. En consecuencia, uno puede hacer lo siguiente;

var data = {groups: [ {id: "AL01", list: [{ speed : 5, value : 10}, { speed : 7, value : 15}]}, {id: "AB01", list: [{ speed : 20, value : 1 }, { speed : 8, value : 10}]}]}, result = {groups: data.groups.map(g => Object.assign({id: g.id},g.list.reduce((r,c) => ({speed : r.speed + c.speed, value : r.value + c.value}))))}; console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }