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

112
Vistas
Encuentre elementos en una matriz de objetos que tengan las mismas propiedades y cree una nueva matriz de objetos

Tengo una serie de objetos como este:

 arr = [ { a: "dog", b: 8, c: "male", d: "big", e: 100 }, { a: "dog1", b: 5, c: "female", d: "big", e: 200}, { a: "dog2", b: 18, c: "female", d: "big", e: 350}, { a: "dog2", b: 18, c: "female", d: "big", e: 350}, { a: "dog", b: 3, c: "male", d: "big", e: 100 }, { a: "dog", b: 8, c: "male", d: "big", e: 100 }, ];

Quiero crear una nueva matriz que contenga solo la propiedad a y la suma de e de esos objetos que tienen los mismos valores para b , c y d , de modo que tendré una matriz como esta:

 arr2 = [ { a: "dog", e: 300 }, { a: "dog2", e: 700}, ];

Ya intenté usar una función de map dentro de una función de map buscando los elementos que tienen las mismas propiedades b , c y d , luego empujando el resultado en el arr2 , pero empuja cada vez todos los objetos de mi arr inicial.

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

0

Podría usar Array.reduce para crear un mapa de los elementos de la matriz, usando b, c y d combinados como clave.

Una vez que tengamos este mapa, podemos usar Object.values() para obtener una matriz como el resultado deseado.

 arr = [ { a: 'dog', b: 8, c: 'male', d: 'big', e: 100 }, { a: 'dog1', b: 5, c: 'female', d: 'big', e: 200}, { a: 'dog2', b: 18, c: 'female', d: 'big', e: 350}, { a: 'dog2', b: 18, c: 'female', d: 'big', e: 350}, { a: 'dog', b: 3, c: 'male', d: 'big', e: 100 }, { a: 'dog', b: 8, c: 'male', d: 'big', e: 100 }, ]; const result = Object.values(arr.reduce((acc, cur) => { // Create a key from b,c,d.. const key = cur.b + cur.c + cur.d acc[key] = acc[key] || { a: cur.a, e: 0 }; acc[key].e += cur.e; return acc; }, {})) console.log('Result:', result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Solución universal para matriz arbitraria y claves para resumir

Si está buscando una solución Vanilla JS (sin lodash), puede encontrar algo, ajustable a la propiedad de clave de grupo arbitraria y propiedad para resumir con Array.prototype.reduce() :

  • construir el Map , teniendo la propiedad deseada como clave;
  • incrementar los elementos del Map , en función de la clave coincidente
  • obtenga Map.prototype.values() de ese Map en una matriz

 const src = [ { a: "dog", b: 8, c: "male", d: "big", e: 100 }, { a: "dog1", b: 5, c: "female", d: "big", e: 200}, { a: "dog2", b: 18, c: "female", d: "big", e: 350}, { a: "dog2", b: 18, c: "female", d: "big", e: 350}, { a: "dog", b: 3, c: "male", d: "big", e: 100 }, { a: "dog", b: 8, c: "male", d: "big", e: 100 }, ] const summarizeValueByKey = (arr, key, val) => [...arr .reduce((acc,{[key]: keyProp, [val]: valProp}) => { const group = acc.get(keyProp) group ? group[val] += valProp : acc.set(keyProp, {[key]: keyProp, [val]: valProp}) return acc }, new Map) .values()] console.log(summarizeValueByKey(src, 'a', 'e'))

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