Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

162
Vistas
Sumar valores en una matriz 2D basada en el valor de búsqueda - Javascript

Tengo dos matrices:

 const array = [ [1, 7, 'AAA'], [2, 5, 'BBB'], [3, 2, 'CCC'], [4, 4, 'DDD'], [4, 9, 'EEE'], [4, 2, 'FFF'], [5, 8, 'GGG'], [6, 2, 'HHH']]; const names = [ [1, 'Joe'], [2, 'Dave'], [3, 'Mike'], [4, 'Sandra'], [5, 'Sue'], [6, 'Mary']];

Según el valor de la primera columna, quiero sumar los valores de la matriz[1] y enumerar las letras de tres caracteres. El resultado que estoy tratando de obtener es:

 const names = [ [1, 'Joe',7,'AAA'], [2, 'Dave',5,'BBB'], [3, 'Mike',2,'CCC'], [4, 'Sandra',15,'DDD, EEE, FFF'], [5, 'Sue',8,'GGG'], [6, 'Mary',2,'HHH']]

No estoy seguro del mejor enfoque, soy bastante nuevo en Javascript. Lo que logré hacer es obtener el resultado correcto cuando un valor en la matriz [0] no se repite, pero no puedo hacer que funcione una suma o una lista.

 const counter = (array,value) => array.filter((v) => (v === value)).length; const arrayCol = (array,value) => array.map(v => v[value]); const sum = (prevVal, curVal) => prevVal + curVal; names.forEach ((p,e) => { array.forEach ((v,x) => (counter(arrayCol(array,0),v[0])===1) ? (v[0]===p[0]) && names[e].push(v[1],v[2]) : (v[0]===p[0]) && names[e].push(array.reduce(sum,0)) ); }); console.log(names);

Estoy seguro de que la respuesta tiene que ver con el map o el filter , pero no estoy seguro de cómo ... se agradece cualquier sugerencia. Gracias

EDITAR: Las tres respuestas a continuación (de Michael Haddad , Nina Scholz y testing_22 ) funcionan y son interesantes.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Puede recopilar todos los datos para cada grupo y luego mapear el resultado en el orden de la matriz de nombres.

 const array = [[1, 7, 'AAA'], [2, 5, 'BBB'], [3, 2, 'CCC'], [4, 4, 'DDD'], [4, 9, 'EEE'], [4, 2, 'FFF'], [5, 8, 'GGG'], [6, 2, 'HHH']], names = [[1, 'Joe'], [2, 'Dave'], [3, 'Mike'], [4, 'Sandra'], [5, 'Sue'], [6, 'Mary']], groups = array.reduce((r, [id, value, code]) => { r[id] ??= [0, '']; r[id][0] += value; r[id][1] += (r[id][1] && ', ') + code; return r; }, {}), result = names.map(a => [...a, ...groups[a[0]]]); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar una combinación de mapa y reducción, como en:

 const array = [[1, 7, 'AAA'], [2, 5, 'BBB'], [3, 2, 'CCC'],[4, 4, 'DDD'], [4, 9, 'EEE'], [4, 2, 'FFF'], [5, 8, 'GGG'], [6, 2, 'HHH']]; const names = [[1, 'Joe'],[2, 'Dave'],[3, 'Mike'],[4, 'Sandra'],[5, 'Sue'],[6, 'Mary']]; const result = names.map(([id, name]) => { let vals = []; let sum = array.reduce((acc, [idx, number, XXX]) => (idx === id ? (vals.push(XXX), number) : 0) + acc, 0); return [ id, name, sum, vals.join(", ") ] }) console.log(result)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Un enfoque básico podría ser:

 const array = [[1, 7, 'AAA'], [2, 5, 'BBB'], [3, 2, 'CCC'], [4, 4, 'DDD'], [4, 9, 'EEE'], [4, 2, 'FFF'], [5, 8, 'GGG'], [6, 2, 'HHH']]; const names = [[1, 'Joe'], [2, 'Dave'], [3, 'Mike'], [4, 'Sandra'], [5, 'Sue'], [6, 'Mary']]; let result = []; for (let name of names) { let newValue = [...name, 0]; let matchingItems = array.filter(i => i[0] === name[0]); let strings = []; // for lack of a better name... for (let item of matchingItems) { newValue[2] += item[1]; strings.push(item[2]); } newValue.push(strings.join(", ")); result.push(newValue); } console.log(result);

También podría implementar la lógica de unión usted mismo (de hecho, prefiero esta versión por razones de legibilidad):

 const array = [[1, 7, 'AAA'], [2, 5, 'BBB'], [3, 2, 'CCC'], [4, 4, 'DDD'], [4, 9, 'EEE'], [4, 2, 'FFF'], [5, 8, 'GGG'], [6, 2, 'HHH']]; const names = [[1, 'Joe'], [2, 'Dave'], [3, 'Mike'], [4, 'Sandra'], [5, 'Sue'], [6, 'Mary']]; let result = []; for (let name of names) { let newValue = [...name, 0, ""]; let matchingItems = array.filter(i => i[0] === name[0]); for (let item of matchingItems) { newValue[2] += item[1]; newValue[3] += newValue[3] === "" ? item[2] : `, ${item[2]}`; } result.push(newValue); } console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda