2009-11-28 89 views
1

我在使用javascript按位時遇到問題。我不知道我是否以這種錯誤的方式去做。但是在這裏。Javascript按位問題

我有4個主要類別。用ID 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仍然有效。

或者這是錯誤的方法?

..fredrik

+0

旁白:忌'爲... in'的迭代陣列,它不會做你期望什麼。如果你不關心你獲得物品的順序,它可能在這裏工作,但如果有人擺弄Object Object原型,它也會炸燬。堅持用舊的C'for(var i = 0; i bobince 2009-11-28 12:23:47

+0

謝謝。但是這是從服務器端加載的JSON對象。 而關於舊學校的循環。您應該將長度設置爲var。由於每個循環它執行我看數組,然後長度。特別是如果你必須計算長度。 var i,l = items.length; for(i = 0; i fredrik 2009-11-28 14:03:18

回答

3

((n & item.c) == item.c)的意思是「真,如果在item.c的所有位也被設置在正」。如果item.c是7並且n是11,則bit 4在item.c中設置,但不在n中,因此結果爲false。

這聽起來像你想if (n & item.c) { ... }

+0

啊似乎工作。太好了!謝謝! – fredrik 2009-11-28 11:38:34

+1

但是,如果item.c只取1,2,4或8作爲它的值,那麼不是'if((n&item.c)== item.c)'等價於if(n&item)。 C)'? – Amarghosh 2009-11-28 11:43:23