Побитовая проблема Javascript
-
06-07-2019 - |
Вопрос
У меня возникла проблема при использовании 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) { ... }