为了账号安全,请及时绑定邮箱和手机立即绑定

在对象数组中按特定键计算分组值

在对象数组中按特定键计算分组值

holdtom 2022-12-02 17:08:15
我有以下数据: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);              }          }我应该进行哪些更改才能获得这些类别的计数uniqueCategory- 如下所示:uniqueCategory = [  {Category: "DevOps", count: 5},  {Category: "Business", count: 4},  ....  {}]
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

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

相反,您可以使用Array.prototype.reduce()遍历源数组并构建 ,将Map所需Category格式的键和对象作为值,然后提取Map.prototype.values()到结果数组中。

这将执行得更快并且扩展性更好。

const src = [{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}],


      result = [...src

        .reduce((r, {Category}) => {

          const cat = r.get(Category)

          cat ? cat.count ++ : r.set(Category, {Category, count: 1})

          return r

        }, new Map)

        .values()

      ]

    

console.log(result)

.as-console-wrapper{min-height:100%;}


查看完整回答
反对 回复 2022-12-02
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

最简单的方法是使用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


查看完整回答
反对 回复 2022-12-02
?
噜噜哒

TA贡献1784条经验 获得超7个赞

.map这是使用and的另一种选择Set:


const src = [

{

  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

}

];


const categories = src.map(obj => obj.Category);

const distinctCategories = [...new Set(categories)];

console.log(distinctCategories.length);


查看完整回答
反对 回复 2022-12-02
  • 3 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信