计算具有该对象的数组中的对象和该对象的计数

问题描述 投票:-1回答:2

我有这段代码。并且想要将重复的applicationType与applicationType一起计数并计算两者。

   {
    applicationType:"Supplemental Marketing Application",
    createdBy:"System"
},
{
    applicationType:"Supplemental Marketing Application",
    createdBy:"System"
},
{
    applicationType:"Orphan Application",
    createdBy:"System"
},
{
    applicationType:"Orpahn Application",
    createdBy:"System"
},
{
    applicationType:"IND/BB",
    createdBy:"System"
}

我也想计算应用程序类型以及应用程序类型名称,并且想要这样的结果,

{
    applicationType:"Supplemental Marketing Application",
    count:"2"
},
{
    applicationType:"Orphan Application",
    count:"2"
},
{
    applicationType:"IND/BB",
    count:"1"
}

要么

applicationType = [Supplemental Marketing Application,Orphan Application,IND/BB]
count = [2,2,1]
javascript reactjs reducers
2个回答
0
投票

您可以使用Array.reduce()创建一个按应用类型分组的地图。检查地图中是否存在应用程序类型,如果地图中已存在,则将计数更新为1,否则将其映射为默认计数1.地图上的Object.values()将为您提供所需的输出:

let arr = [ { applicationType:"Supplemental Marketing Application", createdBy:"System" }, { applicationType:"Supplemental Marketing Application", createdBy:"System" }, { applicationType:"Orphan Application", createdBy:"System" }, { applicationType:"Orphan Application", createdBy:"System" }, { applicationType:"IND/BB", createdBy:"System" } ];

let result = Object.values(arr.reduce((a, curr)=>{
  a[curr.applicationType] = a[curr.applicationType] || {applicationType : curr.applicationType, count : 0} ;
  a[curr.applicationType].count++;
  return a;
},{}));

console.log(result);

1
投票

您可以使用reduce函数并检查累加器数组中是否存在其值与原始数组中的applicationType值匹配的键如果findIndex ===-1然后使用原始数组中的这些值创建一个新对象,然后推入累加器,否则如果它已经存在然后更新count的值

let orgArray = [{
    applicationType: "Supplemental Marketing Application",
    createdBy: "System"
  },
  {
    applicationType: "Supplemental Marketing Application",
    createdBy: "System"
  },
  {
    applicationType: "Orphan Application",
    createdBy: "System"
  },
  {
    applicationType: "Orpahn Application",
    createdBy: "System"
  },
  {
    applicationType: "IND/BB",
    createdBy: "System"
  }
]
let newArray = orgArray.reduce(function(acc, curr) {
  let findIndex = acc.findIndex(function(item) {
    return item.applicationType === curr.applicationType
  });

  if (findIndex === -1) {
    let newObj = {}
    newObj.applicationType = curr.applicationType;
    newObj.count = 1
    acc.push(newObj)
  } else {
    acc[findIndex].count += 1

  }


  return acc;


}, []);

console.log(newArray)
© www.soinside.com 2019 - 2024. All rights reserved.