He estado dando vueltas con esto, pero no sé cómo agregar una columna o un criterio. Esto agrupa por la primera "columna", pero ¿cómo hacer que se agrupe también por la última columna?
Esta es la respuesta :
let array = [[3, 'name', 'old'],[4, 'lastname','young'],[2, 'name', 'old'],[4, 'lastname','old']]; let result = Object.values(array.reduce((c, v) => { if (c[v[1]]) c[v[1]][0] += v[0]; //Add the first element if already exist else c[v[1]] = v; //Assign the value if does not exist return c; }, {})); console.log(result);Resultado Esperado
result = [ [5, 'name', 'old'], [4, 'lastname','young'], [4, 'lastname','old'] ];¡Gracias!
En su situación, como una simple modificación, por ejemplo, ¿qué tal usar los valores de las columnas "B" y "C" como clave del objeto de reduce de la siguiente manera?
let array = [[3, 'name', 'old'], [4, 'lastname', 'young'], [2, 'name', 'old'], [4, 'lastname', 'old']]; let result = Object.values(array.reduce((c, v) => { const k = v[1] + v[2]; if (c[k]) c[k][0] += v[0]; else c[k] = v; return c; }, {})); console.log(result);Cuando se ejecuta este script, se obtiene el siguiente resultado.
[ [ 5, 'name', 'old' ], [ 4, 'lastname', 'young' ], [ 4, 'lastname', 'old' ] ] function teste() { let array = [[3, 'name', 'old'], [4, 'lastname', 'young'], [2, 'name', 'old'], [4, 'lastname', 'old']]; let result = Object.values(array.reduce((c, v) => { if (c[v[1]]) c[v[1]][0] += v[0]; else c[v[1]] = v; if (c[v[2]]) c[v[1]][0] += v[0]; else c[v[2]] = v; return c; }, {})); console.log(result); } Execution log 2:03:43 PM Notice Execution started 2:03:43 PM Info [ [ 7, 'name', 'old' ], [ 7, 'name', 'old' ], [ 12, 'lastname', 'young' ], [ 12, 'lastname', 'young' ] ] 2:03:44 PM Notice Execution completed