Javascript 计算json数组对象并使用SUM结果创建新数组

Javascript 计算json数组对象并使用SUM结果创建新数组,javascript,jquery,arrays,json,reduce,Javascript,Jquery,Arrays,Json,Reduce,我有一个像这样的JSON数组 const arrayVal = [{ "DATE": "2020-12-1", "NAME": "JAKE", "TEAM_NO": 2, }, { "DATE": "2020-12-1", "NAME": "ANNA", &qu

我有一个像这样的JSON数组

const arrayVal = [{
    "DATE": "2020-12-1",
    "NAME": "JAKE",
    "TEAM_NO": 2,
    
}, {
    "DATE": "2020-12-1",
    "NAME": "ANNA",
    "TEAM_NO": 2,
    
}, {
    "DATE": "2020-12-1",
    "NAME": "JEFF",
    "TEAM_NO": 1,
    
}, {
    "DATE": "2020-12-1",
    "NAME": "ERIKA",
    "TEAM_NO": 2,
   
}, {
    "DATE": "2020-12-1",
    "NAME": "SUTTON",
    "TEAM_NO": 3,
}, {
    "DATE": "2020-12-1",
    "NAME": "ARNOLD",
    "TEAM_NO": 3,
     
}, {
    "DATE": "2020-12-2",
    "NAME": "JAKE",
    "TEAM_NO": 4,
     
}, {
    "DATE": "2020-12-2",
    "NAME": "ANNA",
    "TEAM_NO": 2,
     
}, {
    "DATE": "2020-12-2",
    "NAME": "JEFF",
    "TEAM_NO": 1,
     
}, {
    "DATE": "2020-12-2",
    "NAME": "ERIKA",
    "TEAM_NO": 3,
     
}, {
    "DATE": "2020-12-2",
    "NAME": "SUTTON",
    "TEAM_NO": 5,
     
}, {
    "DATE": "2020-12-2",
    "NAME": "ARNOLD",
    "TEAM_NO": 5,
     
}, {
    "DATE": "2020-12-3",
    "NAME": "JAKE",
    "TEAM_NO": 1,
     
}, {
    "DATE": "2020-12-3",
    "NAME": "ANNA",
    "TEAM_NO": 1,
     
}, {
    "DATE": "2020-12-3",
    "NAME": "JEFF",
    "TEAM_NO": 1,
     
}, {
    "DATE": "2020-12-3",
    "NAME": "ERIKA",
    "TEAM_NO": 2,
     
}, {
    "DATE": "2020-12-3",
    "NAME": "SUTTON",
    "TEAM_NO": 3,
     
}, {
    "DATE": "2020-12-3",
    "NAME": "ARNOLD",
    "TEAM_NO": 3,
      
}];
我只是想从上面的数组中得到下面的一种reult。在本例中,我希望按天计算团队数量,并使用“team\u NO\u count”参数创建一个新数组

[{
    "DATE": "2020-12-1",
    "TEAM_NO": 3, 
    "TEAM_NO_COUNT": 2, // 2 entries with no 3 team
     
}, {
    "DATE": "2020-12-1",
    "TEAM_NO": 1,
    "TEAM_NO_COUNT": 2,  // 2 entries with no 1 team
}, {
    "DATE": "2020-12-2",
    "TEAM_NO": 4,
    "TEAM_NO_COUNT": 1,  
}]
到目前为止,我已经有了这段代码,但它只给了我一个带有团队编号的json对象,但这不是我想要的,我需要上面的精确结果

TEAM_NO_COUNT = {}; // create an object
$.each(JSON.parse(JSON.stringify(arrayVal)), function (key, val) {

DATE_NO_CO = {};

  TEAM_NO_COUNT[val.DATE] = (TEAM_NO_COUNT[val.DATE] || {});

  TEAM_NO_COUNT[val.DATE][val.TEAM_NO] = (TEAM_NO_COUNT[val.DATE][val.TEAM_NO] || 0) + 1;
  
});

alert(JSON.stringify(TEAM_NO_COUNT));

谁能帮我一个忙吗。我们将不胜感激。谢谢。

在下面找到解决方案

const arrayVal=[{
“日期”:“2020-12-1”,
“姓名”:“杰克”,
“第二小组”:2,
}, {
“日期”:“2020-12-1”,
“姓名”:“安娜”,
“第二小组”:2,
}, {
“日期”:“2020-12-1”,
“姓名”:“杰夫”,
“第二小组”:1,
}, {
“日期”:“2020-12-1”,
“姓名”:“埃里卡”,
“第二小组”:2,
}, {
“日期”:“2020-12-1”,
“姓名”:“萨顿”,
“第二队”:3,
}, {
“日期”:“2020-12-1”,
“姓名”:“阿诺德”,
“第二队”:3,
}, {
“日期”:“2020-12-2”,
“姓名”:“杰克”,
“第4队”,
}, {
“日期”:“2020-12-2”,
“姓名”:“安娜”,
“第二小组”:2,
}, {
“日期”:“2020-12-2”,
“姓名”:“杰夫”,
“第二小组”:1,
}, {
“日期”:“2020-12-2”,
“姓名”:“埃里卡”,
“第二队”:3,
}, {
“日期”:“2020-12-2”,
“姓名”:“萨顿”,
“第5队”,
}, {
“日期”:“2020-12-2”,
“姓名”:“阿诺德”,
“第5队”,
}, {
“日期”:“2020-12-3”,
“姓名”:“杰克”,
“第二小组”:1,
}, {
“日期”:“2020-12-3”,
“姓名”:“安娜”,
“第二小组”:1,
}, {
“日期”:“2020-12-3”,
“姓名”:“杰夫”,
“第二小组”:1,
}, {
“日期”:“2020-12-3”,
“姓名”:“埃里卡”,
“第二小组”:2,
}, {
“日期”:“2020-12-3”,
“姓名”:“萨顿”,
“第二队”:3,
}, {
“日期”:“2020-12-3”,
“姓名”:“阿诺德”,
“第二队”:3,
}];
设finalArray=[];
arrayVal.forEach((x)=>{
如果(finalArray.length==0){
最后推({
日期:x.DATE,
团队编号:x。团队编号:,
团队编号:1
});
}否则{
设indexI,flag=false;
finalArray.forEach((i,索引)=>{
如果(x.TEAM\u NO==i.TEAM\u NO&&x.DATE==i.DATE){
indexI=指数;
flag=true;
}
});
如果(!标志){
最后推({
日期:x.DATE,
团队编号:x。团队编号:,
团队编号:1
});
}否则{
最终结果[indexI][“团队数量”]+=1;
}
}
});
控制台日志(finalArray)功能解决方案:

reduce()方法对数组的每个元素执行一个reducer函数(您提供的),从而产生单个输出值

reducer函数有四个参数:累加器、当前值、当前索引和源数组

更多信息请参见:

const arrayVal=[{
“日期”:“2020-12-1”,
“姓名”:“杰克”,
“第二小组”:2,
}, {
“日期”:“2020-12-1”,
“姓名”:“安娜”,
“第二小组”:2,
}, {
“日期”:“2020-12-1”,
“姓名”:“杰夫”,
“第二小组”:1,
}, {
“日期”:“2020-12-1”,
“姓名”:“埃里卡”,
“第二小组”:2,
}, {
“日期”:“2020-12-1”,
“姓名”:“萨顿”,
“第二队”:3,
}, {
“日期”:“2020-12-1”,
“姓名”:“阿诺德”,
“第二队”:3,
}, {
“日期”:“2020-12-2”,
“姓名”:“杰克”,
“第4队”,
}, {
“日期”:“2020-12-2”,
“姓名”:“安娜”,
“第二小组”:2,
}, {
“日期”:“2020-12-2”,
“姓名”:“杰夫”,
“第二小组”:1,
}, {
“日期”:“2020-12-2”,
“姓名”:“埃里卡”,
“第二队”:3,
}, {
“日期”:“2020-12-2”,
“姓名”:“萨顿”,
“第5队”,
}, {
“日期”:“2020-12-2”,
“姓名”:“阿诺德”,
“第5队”,
}, {
“日期”:“2020-12-3”,
“姓名”:“杰克”,
“第二小组”:1,
}, {
“日期”:“2020-12-3”,
“姓名”:“安娜”,
“第二小组”:1,
}, {
“日期”:“2020-12-3”,
“姓名”:“杰夫”,
“第二小组”:1,
}, {
“日期”:“2020-12-3”,
“姓名”:“埃里卡”,
“第二小组”:2,
}, {
“日期”:“2020-12-3”,
“姓名”:“萨顿”,
“第二队”:3,
}, {
“日期”:“2020-12-3”,
“姓名”:“阿诺德”,
“第二队”:3,
}];
const result=arrayVal.reduce((当前,条目)=>{
const{DATE,NAME,TEAM_NO}=条目;
const newEntry={DATE,TEAM_NO,“TEAM_NO_COUNT”:1};
const currEntry=curr.find(currEntry=>currEntry.DATE==DATE&&currEntry.TEAM\u NO==TEAM\u NO);
if(currEntry==null){
返回[…curr,{…newEntry}];
}否则{
返回[
…当前筛选器(currEntry=>!(currEntry.DATE==DATE&&currEntry.TEAM\u NO==TEAM\u NO)),
{…新条目,“团队人数”:currEntry.TEAM人数+1}
];
}
}, []);

控制台日志(结果)奖金:包含名称的版本: