4

次の PHP スクリプトがあります。JavaScript で同じことを行う必要があります。PHP 関数と同様に機能する JavaScript の関数はありますか? 何日も探していますが、似たようなものは見つかりません。私がやりたいことは、特定の単語が配列で使用されている回数を数えることです。

$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];
4

6 に答える 6

13

単純に新しい JavaScript 配列「カウント」を作成しない理由 元の配列を反復処理し、配列内で検出されたキーの「カウント」のカウントをインクリメントします。 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']);
于 2011-03-07T07:52:24.730 に答える
7

別の洗練された解決策は、Array.prototype.reduceを使用することです。与えられた:

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

reduceを実行するだけです:

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

最後に、結果を確認できます。

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

上記のサンプルでは、​​reduceは 2 つのパラメーターを取ります。

  1. アキュムレータ (reduce の 2 番目の引数から初期化される) と現在の配列要素を受け取る関数 (ここでは匿名)
  2. アキュムレータの初期値

関数が返すものは何でも、次の呼び出しでアキュムレータ値として使用されます。

型の観点からは、配列要素の型が何であれ、アキュムレータの型は reduce の 2 番目の引数の型 (初期値) および無名関数の戻り値の型と一致する必要があります。これはreduceの戻り値の型にもなります。

于 2014-07-27T11:10:43.810 に答える
2

これはどう:

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;
}
于 2011-03-07T08:01:08.560 に答える
0

これはうまくいくはずです

function array_count_values(array) {
  var tmpArr = {};
  var key = '';
  var t = '';
  var _countValue = function(tmpArr, value) {
    if (typeof value === 'number') {
      if (Math.floor(value) !== value) {
        return;
      }
    } else if (typeof value !== 'string') {
      return;
    }
    if (value in tmpArr && tmpArr.hasOwnProperty(value)) {
      ++tmpArr[value];
    } else {
      tmpArr[value] = 1;
    }
  }

  for (key in array) {
    if (array.hasOwnProperty(key)) {
      _countValue.call(this, tmpArr, array[key]);
    }

  }

  return tmpArr;
}
console.log(array_count_values([12, 43, 12, 43, "null", "null"]));

于 2020-06-08T17:50:06.900 に答える