Javascript 计算json数组对象并使用SUM结果创建新数组
我有一个像这样的JSON数组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
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}
];
}
}, []);
控制台日志(结果)代码>奖金:包含名称的版本: