Javascript побитовая проблема - PullRequest
1 голос
/ 28 ноября 2009

У меня проблема при использовании побитового в 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 все еще активны.

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

.. Фредрик

1 Ответ

3 голосов
/ 28 ноября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...