• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

168
Vistas
Refactorización del recorrido de objetos de Javascript

El código que tengo da como resultado el resultado deseado. Sin embargo, en mi opinión, usar estos bucles for anidados es un poco feo y estoy tratando de refactorizar mi trabajo.

Mi pregunta es: ¿tiene alguna sugerencia sobre cómo refactorizar el código para que pueda evitar la necesidad de usar estos bucles for anidados?

Quiero recorrer un objeto anidado y terminar con un resultado de todas las claves únicas y una matriz de todos los valores para esa clave única.

 {"ABC":["1","100","6"],"DEF":["10","2","5"],"GHI":["14","9"],"HGI":["4"]} 

 const data = { something: [ { innerSomething: { list: [ { title: "ABC", amount: "1" }, { title: "DEF", amount: "10" }, { title: "GHI", amount: "14" } ], } }, { innerSomething: { list: [ { title: "ABC", amount: "100" }, { title: "DEF", amount: "2" }, { title: "GHI", amount: "9" } ], } }, { innerSomething: { list: [ { title: "ABC", amount: "6" }, { title: "DEF", amount: "5" }, { title: "HGI", amount: "4" } ], } } ] }; const results = {}; data.something.forEach((item) => { item.innerSomething.list.forEach((list) => { if (results[list.title]) { // exists already, just push the amount results[list.title].push(list.amount) } else { // Is unique so far, add it to the object results[list.title] = [list.amount]; } }) }); console.log(`results: ${JSON.stringify(results)}`); // These results are the correct and desired output // {"ABC":["1","100","6"],"DEF":["10","2","5"],"GHI":["14","9"],"HGI":["4"]}

almost 3 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Por lo que vale, así es como lo escribiría.

 const data = { something: [ { innerSomething: { list: [ { title: "ABC", amount: "1" }, { title: "DEF", amount: "10" }, { title: "GHI", amount: "14" } ], } }, { innerSomething: { list: [ { title: "ABC", amount: "100" }, { title: "DEF", amount: "2" }, { title: "GHI", amount: "9" } ], } }, { innerSomething: { list: [ { title: "ABC", amount: "6" }, { title: "DEF", amount: "5" }, { title: "GHI", amount: "4" } ], } } ] }; const results = {}; for (let something of data.something) { for (let item of something.innerSomething.list) { const { title, amount } = item; results[title] = results[title] || []; results[title].push(amount); } } console.log(`results: ${JSON.stringify(results)}`);

almost 3 years ago · Juan Pablo Isaza Denunciar

0

Su implementación está bien, tbh. Lo único que puedo sugerir de manera diferente es hacer uso de los patrones de desestructuración ordenados y la sintaxis extendida, considerando que la estructura de su objeto de entrada es muy conocida:

 data.something.forEach(({ innerSomething: { list } }) => list.forEach(({ title, amount }) => results[title] = [...results[title] || [], amount]))
almost 3 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda