簡體   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