Javascript 在对象数组中,按特定键对分组值进行计数

Javascript 在对象数组中,按特定键对分组值进行计数,javascript,arrays,Javascript,Arrays,我有以下数据: const data2 = [ { App: "testa.com", Name: "TEST A", Category: "HR", Employees: 7 }, { App: "testd.com", Name: "TEST D", Category: "DevOps", Employees: 7 }, { App:

我有以下数据:

const data2 = [
{
  App: "testa.com",
  Name: "TEST A",
  Category: "HR", 
  Employees: 7
},
{
  App: "testd.com",
  Name: "TEST D",
  Category: "DevOps", 
  Employees: 7
},
{
  App: "teste.com",
  Name: "TEST E",
  Category: "DevOps", 
  Employees: 7
},
{
  App: "testf.com",
  Name: "TEST F",
  Category: "Business", 
  Employees: 7
}
]
我想得到不同类别的计数:现在我得到的是所有不同类别的列表,但我无法计算它们的计数

以下代码片段为我提供了不同的类别:

  let uniqueCategory = [];
  for(let i = 0; i < result.data.length; i++){    
      if(uniqueCategory.indexOf(result.data[i].Category) === -1){
        uniqueCategory.push(result.data[i].Category);        
      }        
  }

您的方法意味着在(..-loop)的每次
迭代中循环源数组(使用
.indexOf()
),这将不必要地减慢查找过程

相反,您可以使用遍历源数组并构建,将
类别
作为键,将所需格式的对象作为值,然后提取到结果数组中

这将更快地执行并更好地扩展

const src=[{App:“testa.com”,名称:“testa”,类别:“HR”,员工:7},{App:“testd.com”,名称:“testd”,类别:“DevOps”,员工:7},{App:“teste.com”,名称:“teste”,类别:“DevOps”,员工:7},{App:“testf.com”,名称:“TEST F”,类别:“业务”,员工:7},
结果=[…src
.reduce((r,{Category})=>{
常量cat=r.get(类别)
cat?cat.count++:r.set(Category,{Category,count:1})
返回r
},新地图)
.values()
]
console.log(结果)

.as控制台包装{min height:100%;}
这里是另一个使用
.map
设置的替代方法:

const src=[
{
应用程序:“testa.com”,
名称:“测试A”,
类别:“人力资源”,
员工:7人
},
{
应用程序:“testd.com”,
名称:“测试D”,
类别:“DevOps”,
员工:7人
},
{
应用程序:“teste.com”,
名称:“测试E”,
类别:“DevOps”,
员工:7人
},
{
应用程序:“testf.com”,
名称:“测试F”,
类别:“商业”,
员工:7人
}
];
const categories=src.map(obj=>obj.categories);
常量distinctCategories=[…新集合(类别)];

console.log(distinctCategories.length);
最简单的方法是使用
Array.prototype.reduce

const arr = [ ... ];
const output = arr.reduce((result, obj) => {
  if (!result[obj.category]) {
    result[obj.category] = 0;
  }

  result[obj.category]++;

  return result;
}, {});
console.log(output); // this should log the similar output you want

这不是一个JSON对象。它是一个JS对象。当你说
count
时,你是指
Employees
值的总和吗?@Anthony不,我是指
DevOps
在对象中出现的次数。我也在寻找他们的计数被推到
distinctCategories
中。这给了我一个不同的类别。'.//这s应该记录“您可以发布实时代码段,这样无论它记录什么,它都可以在普通视图中查看
const arr = [ ... ];
const output = arr.reduce((result, obj) => {
  if (!result[obj.category]) {
    result[obj.category] = 0;
  }

  result[obj.category]++;

  return result;
}, {});
console.log(output); // this should log the similar output you want