tengo un problema con respecto a agrupar una matriz por los valores de una columna específica que obtengo de una hoja de Google con .getRange().getValues() .
Matriz de ejemplo:
var Arr = [ [Mat. Group 1, xyz, name xyz, -31.0, -610], [Mat. Group 2, abc, name abc, -12.0, -434], [Mat. Group 1, gew, name gew, -44.0, -234], [Mat. Group 1, zrw, name zrw, -22.0, -214], [Mat. Group 2, dbh, name dbh, -91.0, -193], [Mat. Group 3, dse, name dse, -282.0, -176], [Mat. Group 4, dwq, name dwq, -235.0, -151], [Mat. Group 3, dge, name dge, -45.0, -150] ]Quiero agrupar los valores en la columna 4 (Precio Neto) por el Grupo de Material en la columna 0. (col1 = Número de Referencia, col 2 = Nombre de la Referencia, col 3 = Cantidad)
Así que el resultado debería verse así:
[ [Mat. Group 1, -1058], [Mat. Group 2, -627], [Mat. Group 3, -326], [Mat. Group 4, -151], ]Hay algunas soluciones sobre cómo hacer esto con una matriz de objetos (como esta publicación: https://stackoverflow.com/a/57477448/15361059 ) mediante el uso de formularios de matriz.
Soy nuevo en formularios de matriz. Intenté modificar las soluciones, pero siempre fallaba. Así que tal vez podrías apoyarme con este problema.
Gracias por adelantado.
Una reducción funcionaría bien aquí
var Arr = [ ["Mat. Group 1", "xyz", "name xyz", -31.0, -610], ["Mat. Group 2", "abc", "name abc", -12.0, -434], ["Mat. Group 1", "gew", "name gew", -44.0, -234], ["Mat. Group 1", "zrw", "name zrw", -22.0, -214], ["Mat. Group 2", "dbh", "name dbh", -91.0, -193], ["Mat. Group 3", "dse", "name dse", -282.0, -176], ["Mat. Group 4", "dwq", "name dwq", -235.0, -151], ["Mat. Group 3", "dge", "name dge", -45.0, -150] ] const newArr = Arr.reduce((acc, cur) => { const idx = acc.findIndex(arr => arr[0] === cur[0]); if (idx != -1) acc[idx][1] += cur[4]; else acc.push([cur[0], cur[4]]); return acc }, []); console.log(newArr)Puede obtener el resultado esperado con la agrupación por enfoque clave
const data = [["Mat. Group 1", "xyz", "name xyz", -31.0, -610],["Mat. Group 2", "abc", "name abc", -12.0, -434],["Mat. Group 1", "gew", "name gew", -44.0, -234],["Mat. Group 1", "zrw", "name zrw", -22.0, -214],["Mat. Group 2", "dbh", "name dbh", -91.0, -193],["Mat. Group 3", "dse", "name dse", -282.0, -176],["Mat. Group 4", "dwq", "name dwq", -235.0, -151],["Mat. Group 3", "dge", "name dge", -45.0, -150]] const result = Object.values(data.reduce((acc, [group,,,, value]) => ({ ...acc, [group]: [group, (acc[group] ?? [0, 0])[1] + value] }), {})); console.log(result) .as-console-wrapper{min-height: 100%!important; top: 0}