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

111
Vistas
Operadores bit a bit en JavaScript como banderas en un estado

Estoy tratando de instalar algo de lógica en una pieza de JS en la que estoy trabajando que simplemente agregará/eliminará indicadores según algunas condiciones.

Consta principalmente de dos pasos.

  1. Crear un objeto basado en algunos datos con estado
  2. Transferir al método de inicialización posterior para analizar la matriz de datos de objetos

En el Step 1 , hay una propiedad de 'estado', que puede tener varios indicadores:

 - INCOMPLETE = 1 - COMPLETE = 2 - CURRENT = 4 - NOT_APPLICABLE = 8

Cuando se analiza la matriz de objetos, verifica cada elemento para ver qué indicadores de estado están configurados:

 if CURRENT is set, give class 'item-current' to node if INCOMPLETE is set, give class 'item-incomplete' to node if COMPLETE is set, give class 'item-complete' to node if NOT_APPLICABLE is set, give class 'item-not-applicable' to node

A medida que el usuario interactúa con la página, los indicadores cambiarán en la matriz de objetos; cuando un usuario 'completa' un segmento, el estado de esa propiedad de objeto eliminará el indicador INCOMPLETE y agregará el indicador COMPLETE .

Intenté hacer esto de esta manera:

 let v = [ { name: "Item 1", status: COMPLETE }, { name: "Item 2", status: INCOMPLETE | CURRENT }, { name: "Item 3", status: INCOMPLETE } ]; // Moving on to step 3 v[1].status = v[1].status ^ INCOMPLETE ^ CURRENT | COMPLETE; // remove incomplete and current from Item 2, marking as COMPLETE v[2].status = v[2].status | CURRENT; // marks Item 3 as current step, but not yet complete

En el escenario anterior, el Item 1 se completó y el usuario pasó al Item 2 , que aún está INCOMPLETO y el paso ACTUAL. Por alguna razón, cuando estoy evaluando las condiciones de las banderas, me da (lo que parece) un comportamiento inesperado.

He intentado eliminar el indicador haciendo lo siguiente: v[1].status ^= CURRENT v[1].status = v[1].status ^ CURRENT

Y comparando por:

 if ((v[1].status & COMPLETE) === COMPLETE) { // is complete } else { // not complete }

Pero, sin embargo, todavía parezco enfrentar banderas que parecen estar todavía configuradas, o que se configuran inesperadamente. ¿Hay una manera más fácil de hacer esto?

El resultado deseado sería un caso en el que puedo configurar la bandera, eliminar la bandera y verificar si la bandera está configurada, usando constantes que son máscaras de bits.

¿Por qué está INCOMPLETO | ACTUAL lo mismo que INCOMPLETO ^ ACTUAL?

Estoy luchando por quitar un poco de la máscara y devolver ese valor que parece.

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

0

No puede usar operaciones bit a bit como esta con valores que no son potencias de 2.

El valor 3 podría ser cualquiera de los siguientes valores:

  • CURRENT
  • COMPLETE | INCOMPLETE
  • CURRENT | COMPLETE
  • CURRENT | INCOMPLETE
  • CURRENT | COMPLETE | INCOMPLETE

No hay manera de saber qué combinación es.

Cambia los valores a

  • COMPLETO = 1
  • COMPLETO = 2
  • CORRIENTE = 4
  • NO_APLICABLE = 8

y es muy fácil hacer operaciones bit a bit con potencias de 2.

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