2013-06-29 30 views
2

我知道我可以使用這個答案的變化,以找出有多少不同類型的數據中有一個陣列檢測多少不同類型的值在:陣列中的

How to count the number of certain element in an array?

但是,什麼我尋找是,是否有一個簡單的方法來計算有多少不同類型的數據有在陣列:

我有陣列可以具有0,1,或2作爲值

,因此它可以成爲:

a = [1,2,0,1,1,1]; 

,或者它們可以全部是相同的和不同的長度:

a = [1,1,1,1,1,1,1,1,1,1,1,1,1]; 

在JavaScript中,我想返回「1」,如果所有值都是一樣的,「2」的功能,如果有是兩個可能值的混合,如果數組包含全部三個值,「3」。

任何幫助表示讚賞。謝謝。

回答

3

簡單的方法是保存找到的值的地圖,並記住每次添加時的值:Live Example | Live Source

function countUniques(a) { 
    var valuesSeen = {}; 
    var count = 0; 

    a.forEach(function(value) { 
     if (!valuesSeen[value]) { 
      ++count; 
      valuesSeen[value] = true; 
     } 
    }); 
    return count; 
} 

(注意:使用ES5的forEach如果您使用的是舊的瀏覽器,你需要墊片,它搜索「ES5墊片」爲它找一個墊片)

或者,如果您不喜歡與您一起工作的人,並且喜歡使用操作符而不是分支語句:Live Copy | Live Source

function countUniques(a) { 
    var valuesSeen = {}, count = 0; 

    a.forEach(function(value) { 
     valuesSeen[value] || (++count, valuesSeen[value] = true); 
    }); 
    return count; 
} 
+0

世界上最快的typer .. +1 – tymeJV

+0

使用'.reduce' ;-)必須有一個更好用的解決方案 – Alnitak

+0

@Alnitak:LOL!我確定。 :-)幾乎所有使用'reduce'的解決方案都很時髦。 –