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

211
Vistas
Cómo comprobar qué combinación de variables está definida y proceder en consecuencia

Tengo un caso de uso en el que un usuario puede pasar cierta cantidad de variables en función de las cuales se realizará una lógica específica.

Como la combinación de variables difiere, trato de pensar en una forma elegante de codificar este proceso.

Por ejemplo, el usuario puede pasar name & type o email && schoolId && type otras combinaciones no son compatibles.

Estaba pensando en algo como esto:

 const filterByX = (name && type); const filterByY = (email && schoolId && type); const decision = (filterByX ? 'filterX' : (filterByY ? 'filterY' : null )); switch(decision) { case 'filterX': ... break; case 'filterY': ... break; default: console.log('not supported') }

Pero confío en que hay una forma más elegante de implementar esa lógica. Agradecería una sugerencia.

about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Una idea es un objeto codificado con la combinación bit a bit de variables. Por ejemplo, si a , b , c son los booleanos de entrada, cada combinación que le interese se puede codificar como un int 0-7.

 const boolsToBits = (a,b,c) => { return a << 2 | b << 1 | c ; } console.log(boolsToBits(true, true, false)) // == 6

Con eso, puede switch el int resultante o (mejor, imo) describir funciones correspondientes a las condiciones usando datos, usando un objeto ingresado por los ints resultantes.

 const actions = { 7: () => console.log('a, b and c are true'), 6: () => console.log('a, b are true'), 2: () => console.log('only b is true'), } const defaultAction = () => console.log('a combo not coded for explicitly') const boolsToBits = (a, b, c) => { return a << 2 | b << 1 | c; } const handleThreeBools = (a, b, c) => { const action = actions[boolsToBits(a, b, c)] || defaultAction; action(); } handleThreeBools(true, true, true); handleThreeBools(true, true, false); handleThreeBools(false, true, false); handleThreeBools(false, true, true);

La idea se puede generalizar para un número arbitrario de bools como este...

 const actions = { 7: () => console.log('a, b and c are true'), 6: () => console.log('a, b are true'), 2: () => console.log('only b is true'), 33: () => console.log('thats a lot of bits!') } const defaultAction = () => console.log('a combo not coded for explicitly') const boolsToBitsN = (...args) => { const length = args.length; let result = 0; for (let i = 0; i < length; i++) result |= args[i] << (length - 1 - i); return result } const handleNBools = (...args) => { const action = actions[boolsToBitsN(...args)] || defaultAction; action(); } handleNBools(true, false, false, false, false, true);

Y, por supuesto, el objeto que contiene funciones codificadas por ints puede expandirse en consecuencia.

about 4 years ago · Santiago Gelvez 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