Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

165
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda