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