1

私は状態の配列を持っています:

['CO','CA','CO','AL', ... ,'NV']

そして、私は次のように減らしたいと思います:

{ 'CO': 9, 'CA':17, 'AL':1, etc}

値は、配列内で各状態が発生する回数です。

これを行う最も効率的な方法は何ですか?

4

3 に答える 3

4
function compress2dict( raw_arr )
{ 
  var ret={}; 
  for(var i=0;i<raw_arr.length;i++)
  {
     var item=raw_arr[i];
     ret[item]|=0;
     ret[item]++;
  }
  return ret;
}

a = ['CO','BO','CO','CC','CC','CO','CC']
b = compress2dict(a)
b
{'BO':1, 'CC':3, 'CO':3}
于 2012-07-10T01:36:11.337 に答える
0

array_count_valuesPHPJSに興味があるかもしれません。PHParray_count_values関数は目的どおりに動作するため、その関数の JavaScript ポートが適合するのは当然のことです。

于 2012-07-10T01:19:30.490 に答える
0

配列を反復処理し、メンバー値をオブジェクト プロパティ名に割り当て、出現回数を値として割り当てるだけだと思います。

function toObj(arr) {
  var item, obj = {};

  for (var i=0, iLen=arr.length; i<iLen; i++) {
    item = arr[i];
    obj[item]? ++obj[item] : (obj[item] = 1);
  }

  return obj;
}

または、while ループが好きな場合 (高速な場合もあれば、そうでない場合もあります):

function toObj(arr) {
  var item, obj = {}, i = arr.length;

  while (i) {
    item = arr[--i];
    obj[item]? ++obj[item] : (obj[item] = 1);
  }

  return obj;
}
于 2012-07-10T01:22:09.357 に答える