如何使用object的name字段值统计JavaScript中其他字段的数据

如何使用object的name字段值统计JavaScript中其他字段的数据,javascript,arrays,json,object,Javascript,Arrays,Json,Object,我的数据对象是 var obj=[{"Town":"Newton","PropertyType":"Multi Family","InvestmentType":"Homeownership","Perks":"Retail Store"}, {"Town":"South Surrey",&qu

我的数据对象是

var obj=[{"Town":"Newton","PropertyType":"Multi Family","InvestmentType":"Homeownership","Perks":"Retail Store"},
  {"Town":"South Surrey","PropertyType":"Multi Family","InvestmentType":"Investment Property","Perks":"Retail Store"},
  {"Town":"South Surrey","PropertyType":"Multi Family","InvestmentType":"Investment Property","Perks":"Bus Station"},
  {"Town":"South Surrey","PropertyType":"Condo","InvestmentType":"Homeownership","Perks":"Retail Store"}];
我想计算每个城镇的福利

所需成果:

{name:"South Surrey", data:[2,1]}
//As in south surrey the perks retail store counts to 2, 1 is for bus station.


What I have tried..

var Newtonstats=[];//keeps the count
 var eachRec=[];//handles each rec.

obj.forEach(obj=>{
  
  Object.keys(obj).forEach((key)=>{
    
  if(key=="Town")
  {
    switch(obj.Town)
    {
      case "Newton":
        Object.keys(obj).forEach((secKey)=>{
        
          if(secKey=="Perks")
            {
             
              
              (Newtonstats[obj[secKey]]?
                Newtonstats[obj[secKey]]++:
                Newtonstats[obj[secKey]]=1);
                eachRec[0]={name:"Newton", key: Newtonstats};
              
            }
          
        });
      }
    }
  });


});

  console.log(eachRec[0]);
//Outcome. 
// name:"Newton" ,key[]: 'Retail Store': 1
此代码的问题在于它是硬编码的。 我想动态地将值放入每个名称类型中

我试过的第二种方法

我试着使用obj.hasOwnProperty 但是我很困惑

var main={}; 变量计数={}

对象forEach(函数(o){

}))

函数countPerks(对象) {

对象。forEach(函数(o){

}))

返回计数

}


控制台日志(主)

您可以使用
reduce
并将津贴计数分配给该津贴。大概是这样的:

var obj=[{“城镇”:“牛顿”,“地产类型”:“多户”,“投资类型”:“房屋所有权”,“津贴”:“零售店”},{“城镇”:“南萨里”,“地产类型”:“多户”,“投资类型”:“投资地产”,“津贴”:“零售店”},{“城镇”:“南萨里”,“地产类型”:“多户”,“投资类型”:“投资地产”,“津贴”:“公共汽车站”},{“城镇”:“南萨里”,“房地产类型”:“公寓”,“投资类型”:“房屋所有权”,“津贴”:“零售店”}];
var result=Object.values(obj.reduce((a,{Town,Perks})=>{
一个[城镇]=一个[城镇]{城镇,福利:{};
a[城镇].perks[perks]=(a[城镇].perks[perks]| | 0)+1;
返回a;
},{}));

控制台日志(结果)你尝试了什么,遇到了什么问题?我编辑了这个问题来回答你。我的意思是,假设我还想计算南萨里的房产类型,如何使其动态化
if (!main.hasOwnProperty(o.Town)) {
    main[o.Town] =  main[o.Town]+countPerks(obj);
}
// increment the count based on the type
main[o.Town] +=  countPerks(obj);
if (!counts.hasOwnProperty(o.Perks)) {
    counts[o.Perks] = 0;
}
// increment the count based on the type
counts[o.Perks] += 1;