Question

J'ai un problème d'utilisation de bitwise en javascript. Je ne sais pas si je m'y prends mal. Mais voilà.

J'ai 4 catégories principales. Avec l'identifiant 1,2,4,8.

Un élément de mon objet a une propriété avec le total des catégories dont il est membre. c'est à dire.

{ item: { name: 'lorem', c: 7 }} //member of category 1,2,4

J'ai la variable (n) qui contient alors le nombre combiné de catégories actives. Dans ce cas, si toutes les catégories sont actives, le nombre est 15.

Maintenant, si je change n en 11 (la catégorie 1,2,8 est active), j'essaie de déterminer quels éléments sont actifs. Comme ça

for (x in items) {
            item = items[x];
            if ((n & item.c) == item.c) {
                //active
            } else {
                //inactive
            }
        }

Cela ne fonctionne pas correctement. Par exemple, si item.c vaut 9 (membre de 1,8), l'instruction if retournera true. Comme il se doit. Mais si item.c vaut 7 (membre de 1,2,4), l'instruction if renvoie false. C'est mon problème. 7 devrait être vrai puisque les catégories 1 et 2 sont toujours actives.

Ou est-ce la mauvaise approche?

.. fredrik

Était-ce utile?

La solution

(((n & item.c) == item.c) signifie "true" si tous les bits définis dans item.c sont également définis dans n ". Si item.c vaut 7 et n vaut 11, le bit 4 est défini dans item.c mais pas dans n, le résultat est donc false.

On dirait que vous voulez if (n & amp; item.c) {...}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top