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

202
Vistas
¿Consejos de Javascript .reduce()? ¿Hay alguna manera de cambiar el nombre del grupo 'indefinido'?

Estoy tratando de entender la función .reduce() y la mejor manera de hacer lo siguiente.

Tengo el siguiente código:

 const products = [ { name: 'apples', category: 'fruits' }, { name: 'oranges', category: 'fruits' }, { name: 'potatoes', category: 'vegetables' } ]; const groupByCategory = products.reduce((group, product) => { const { category } = product; group[category] = group[category] ?? []; group[category].push(product); return group; }, {});

Quiero agregar un producto sin propiedad de 'categoría' y quiero que se inserte en una clave específica en lugar de agruparse en "indefinido", así que lo edité para:

 const products = [ { name: "apples", category: "fruits" }, { name: "oranges", category: "fruits" }, { name: "potatoes", category: "vegetables" }, { name: "guava"} ]; const groupByCategory = products.reduce((group, product) => { const { category } = product ; // check if 'category' exists, if it doesn't store it as an empty array to push to group[category] = group[category] ?? []; // if category is undefined, push it into 'nocategory'. Otherwise push into relevant. if(!category){ group['nocategory'].push(product); } else { group[category].push(product); }; return group; }, {'nocategory':[]}); console.log(JSON.stringify(groupByCategory, null, 2));

En su mayor parte, funciona (todavía hay un grupo 'indefinido', pero al menos el objeto se coloca en el grupo correcto).

Estoy seguro de que hay una mejor solución/manera adecuada de hacer esto. Cualquier indicador sería apreciada.

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

0

Estás creando indefinido aquí

 group[category] = group[category] ?? []; // category can be undefined

Mover la creación a la declaración if-else

 const products = [ { name: "apples", category: "fruits" }, { name: "oranges", category: "fruits" }, { name: "potatoes", category: "vegetables" }, { name: "guava"} ]; const groupByCategory = products.reduce((group, product) => { const { category } = product ; // check if 'category' exists, if it doesn't store it as an empty array to push to // removed // if category is undefined, push it into 'nocategory'. Otherwise push into relevant. if(!category){ group['nocategory'].push(product); } else { group[category] = group[category] ?? [] // HERE group[category].push(product); }; return group; }, {'nocategory':[]}); console.log(JSON.stringify(groupByCategory, null, 2));

about 4 years ago · Juan Pablo Isaza Denunciar

0

En lugar de un bloque condicional completamente nuevo, puede establecer un valor predeterminado en la desestructuración y luego agrupar como de costumbre.

 const { category = 'nocategory' } = product; 

 const products = [ { name: "apples", category: "fruits" }, { name: "oranges", category: "fruits" }, { name: "potatoes", category: "vegetables" }, { name: "guava"} ]; const groupByCategory = products.reduce((group, product) => { const { category = 'nocategory' } = product; group[category] ??= []; group[category].push(product); return group; }, {}); console.log(JSON.stringify(groupByCategory, null, 2));

Nota: también puede utilizar la asignación lógica nula (??=)

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