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

186
Vistas
Cómo sumar valores duplicados dentro de una matriz en orden

Necesito ayuda para sumar valores dentro de una matriz en orden

Tengo dos matrices:

 array1 = ['car', 'car', 'ball', 'piano', 'car'] array2 = ['2500', '1000', '400', '2500', '4500']

Estoy usando este código a continuación para eliminar los valores duplicados dentro de array1:

 var uniqueValues = []; for(var i in array1){ if(uniqueValues.indexOf(array1[i]) === -1){ uniqueValues.push(array1[i]); } } //returns ['car', 'ball', 'piano']

Lo que necesito es sumar los valores de array2 usando el orden de array1, así tendré este resultado:

 result = ['8000', '400', '2500']

Así que el resultado final sería este:

 array1 = ['car', 'ball', 'piano'] array2 = ['8000', '400', '2500']

Cualquier sugerencia ? gracias.

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

0

(1) Use Array#reduce() y Object.assign() para construir un objeto con claves únicas (y valores sumados):

 { car: 8000, ball: 400, piano: 2500 }

(2) Use Object.keys() para obtener una nueva array1 :

 [ 'car', 'ball', 'piano' ]

(3) Use Object.values() para obtener una nueva array2 :

 [ 8000, 400, 2500 ]

DEMO 1

 let array1 = ['car', 'car', 'ball', 'piano', 'car']; let array2 = ['2500', '1000', '400', '2500', '4500']; const result = array1.reduce((acc, cur, index) => Object.assign(acc, { [cur]: (acc[cur] || 0) + +array2[index] }), {}); array1 = Object.keys(result); array2 = Object.values(result); console.log(array1); console.log(array2);

También puede devolver un objeto literal directamente en Array#reduce() de la siguiente manera:

 const result = array1.reduce((acc, cur, index) => ({ ...acc, [cur]: ((acc[cur] || 0) + +array2[index]) }), {});

DEMO 2

 let array1 = ['car', 'car', 'ball', 'piano', 'car']; let array2 = ['2500', '1000', '400', '2500', '4500']; const result = array1.reduce((acc,cur,index) => ({...acc,[cur]:((acc[cur] || 0) + +array2[index])}), {}); array1 = Object.keys(result); array2 = Object.values(result); console.log(array1); console.log(array2);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Reducir hará el truco

NOTA ¿JavaScript garantiza el orden de las propiedades de los objetos?

 let array1 = ['car', 'car', 'ball', 'piano', 'car'] let array2 = ['2500', '1000', '400', '2500', '4500'] const merged = array1.reduce((acc,cur,i) => { acc[cur] = (acc[cur] || 0) + +array2[i]; // add after casting to number return acc },{}) console.log(merged) array1 = Object.keys(merged) array2 = Object.values(merged) console.log(array1) console.log(array2)

about 4 years ago · Juan Pablo Isaza Denunciar

0

No es exactamente la mejor solución, pero debería funcionar. He usado el mapa para crear un índice y agregar los valores. Es uno simple.

 let array1 = ['car', 'car', 'ball', 'piano', 'car', 'ball', 'piano']; let array2 = ['2500', '1000', '400', '2500', '4500', '2500', '4500']; const MapOfItems = new Map(); array1.forEach(function(item, index) { if (MapOfItems.has(item)) MapOfItems.set(item, MapOfItems.get(item) + +array2[index]); else MapOfItems.set(item, +array2[index]); }); console.log(MapOfItems); console.log(MapOfItems.keys()); console.log(MapOfItems.values());
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