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 回答