Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

117
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda