繁体   English   中英

如何在Javascript中将多个项目列表减少为键值对象?

[英]How to reduce a list of multiple items to a key value pair object in Javascript?

我有一系列状态:

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

我想减少到:

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

该值是阵列中每个状态发生的次数。

什么是最有效的方法呢?

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}

您可能对array_count_values中的array_count_values感兴趣。 由于PHP array_count_values函数完全符合您的要求,因此该函数的JavaScript端口适合。

我希望你只是迭代数组,将成员值分配给对象属性名称和出现次数作为值:

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM