2011-03-07 66 views
1

我有以下的PHP腳本,現在我需要在JavaScript中做同樣的事情。 JavaScript中是否有類似於PHP函數的函數,我一直在尋找天,但找不到類似的東西?我想要做的是計算某個單詞在數組中使用的次數。array_count_values for JavaScript instead

$interfaceA = array($interfaceA_1,$interfaceA_2,$interfaceA_3,$interfaceA_4,$interfaceA_5,$interfaceA_6,$interfaceA_7,$interfaceA_8);  

$interfaceA_array=array_count_values($interfaceA); 
$knappsatsA = $interfaceA_array[gui_knappsats]; 
$touchpanelA = $interfaceA_array[gui_touchpanel]; 
+0

你將需要自己寫:) – johnhunter 2011-03-07 07:52:49

回答

10

爲什麼不能簡單地創建一個新的JavaScript陣列「罪狀」 遍歷原始數組,並increament「罪狀」爲計數在陣列中遇到的鍵。 http://jsfiddle.net/4t28P/1/

var myCurrentArray = new Array("apple","banana","apple","orange","banana","apple"); 

var counts = {}; 

for(var i=0;i< myCurrentArray.length;i++) 
{ 
    var key = myCurrentArray[i]; 
    counts[key] = (counts[key])? counts[key] + 1 : 1 ; 

} 

alert(counts['apple']); 
alert(counts['banana']); 
+0

完美的作品!非常感謝 – user626342 2011-03-07 09:29:16

+2

編輯:'counts'應該是_object_'{}',而不是'Array'。 – 2012-10-13 12:48:51

1

如何:

function arrayCountValues (arr) { 
    var v, freqs = {}; 

    // for each v in the array increment the frequency count in the table 
    for (var i = arr.length; i--;) { 
     v = arr[i]; 
     if (freqs[v]) freqs[v] += 1; 
     else freqs[v] = 1; 
    } 

    // return the frequency table 
    return freqs; 
} 
5

另一種優雅的解決辦法是使用Array.prototype.reduce。 考慮:

var arr = new Array("apple","banana","apple","orange","banana","apple"); 

您可以只運行減少它:

var groups = 
    arr.reduce(function(acc,e){acc[e] = (e in acc ? acc[e]+1 : 1); return acc}, {}); 

最後,您可以檢查結果:

groups['apple']; 
groups['banana']; 

在上面樣品降低有兩個參數:

  1. 一個函數(匿名這裏)服用的蓄能器(從減少的第二個參數進行初始化),和當前的數組元素
  2. 累加器

不管該函數返回的初始值,它會在下次調用時用作累加器值。

從類型的角度來看,無論數組元素的類型如何,累加器的類型都必須與reduce(initial value)的第二個參數的類型以及匿名函數的返回值的類型相匹配。 這也將是返回值類型的減少