Вопрос

У меня возникла проблема при использовании bitwise в javascript.Я не знаю, не иду ли я по этому пути неправильно.Но вот что происходит.

У меня есть 4 основные категории.С идентификатором 1,2,4,8.

Элемент в моем объекте имеет свойство с общим количеством категорий, в которые он входит.т. е.

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

У меня есть переменная (n), которая затем содержит объединенное количество активных категорий.В этом случае, если все категории активны, число равно 15.

Теперь, если я изменю n на 11 (категория 1,2,8 активна) Я пытаюсь определить, какие элементы активны.Вот так

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

Это не работает должным образом.Например, если item.c равен 9 (член 1,8), оператор if вернет true.Как и должно быть.Но если item.c равен 7 (член 1,2,4), оператор if возвращает false .Это моя проблема.7 должен возвращать значение true, поскольку категории 1 и 2 все еще активны.

Или это неправильный подход ?

..фредрик

Это было полезно?

Решение

((n & item.c) == item.c) означает "true, если все биты, установленные в item.c, также установлены в n".Если item.c равен 7, а n равно 11, бит 4 установлен в item.c, но не в n, поэтому результат равен false.

Это звучит так, как будто ты хочешь if (n & item.c) { ... }

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top