Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

111
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!