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

143
Vistas
¿Cuál es el papel de los paréntesis en esta expresión de javascript?

Encontré este breve fragmento ( AQUÍ )

 const pick = (obj, arr) => arr.reduce((acc, curr) => (curr in obj && (acc[curr] = obj[curr]), acc), {});

Y no entiendo el papel de los paréntesis en esta parte.

 (curr in obj && (acc[curr] = obj[curr]), acc)
 () => (... && (... = ...), ...) // First, parentheses after the arrow function means we are returning what is inside () => (...) // This looks like a short if statement curr in obj && ... // Why are we grouping the assignment into parentheses here? (acc[curr] = obj[curr]) // What does (..., ...) is supposed to to () => (... && (...), acc)
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Los paréntesis son obligatorios porque, de lo contrario, esta expresión:

 curr in obj && acc[curr] = obj[curr]

sería una sintaxis no válida, porque el lado izquierdo de = se evaluaría como curr in obj && acc[curr] (una expresión), no una referencia a la que se pueda asignar.

Pero este es un código horrible, es bastante confuso. Una versión mucho mejor sería

 const pick = (obj, arr) => { const output = {}; for (const curr of arr) { if (curr in obj) { output[curr] = obj[curr] } } return output; };

Eso es mucho más fácil de entender de un vistazo, ¿no?

Otra opción es filtrar las entradas del objeto:

 const pick = (obj, arr) => Object.fromEntries( Object.entries(obj) .filter(([key]) => arr.includes(key)) );
about 4 years ago · Juan Pablo Isaza Denunciar

0

Este:

 (curr in obj && (acc[curr] = obj[curr]), acc)

es otra forma de escribir lo siguiente:

 if (curr in obj) { acc[curr] = obj[curr]; } return acc;

No solo la frase de una sola línea es menos legible, sino que también se puede considerar que abusa del operador de coma .

La legibilidad del código es más importante que escribir menos líneas de código.

// ¿Qué se supone que debe hacer (..., ...)?

 () => (... && (...), acc)

Paréntesis en la siguiente expresión:

 (curr in obj && (acc[curr] = obj[curr]), acc)

asegurarse de que:

  1. La expresión general se evalúa como una sola expresión que consta de varias subexpresiones

  2. La asignación se evalúa sin la parte curr in obj && porque sin esos paréntesis, curr in obj && acc[curr] = obj[curr] no es una sintaxis válida.

    Entre paréntesis, la expresión:

     (acc[curr] = obj[curr])

    evaluará el valor de obj[curr] . Entonces la expresión:

     curr in obj && (acc[curr] = obj[curr])

    se convertirá:

     curr in obj && <assignment value>
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