Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

114
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!