2011-03-07 27 views
1

私は以下のPHPスクリプトを用意していますが、JavaScriptでも同じことをする必要があります。 PHP関数に似たJavaScript関数がありますが、私は日数を検索していますが、類似するものは何も見つかりませんか?私がしたいのは、特定の単語が配列内で使用された回数を数えることです。私はこのリンクはあなたに答えをGIVなると思うJavaScriptの代わりにarray_count_values

$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

答えて

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

+2

編集: 'counts'は_object_' {} 'で、' Array'ではありません。 –

1

JS試してみてください。

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 groups = 
    arr.reduce(function(acc,e){acc[e] = (e in acc ? acc[e]+1 : 1); return acc}, {}); 

が最後にあなたが結果をチェックすることができます:上記のサンプルで

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

を減らすが2を取る

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

あなたはそれにを減らすを実行することができますパラメータ:

  1. 関数(匿名ここ)(削減の第2引数から初期化)アキュムレータを取り、現在の配列要素
  2. アキュムレータ

どのような関数が返すの初期値は、それが意志次の呼び出しでアキュムレータ値として使用されます。

配列の要素の型が何であっても、accumulatorの型は、reduce(初期値)の2番目の引数の型と、匿名関数の戻り値の型と一致する必要があります。 これは、の戻り値の型でもあります。です。

関連する問題