javascript - 我想从 jquery 中的 jason 数组中获取每天每个团队编号的数量
问题描述
我有一个这样的 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,
}];
从上面的数组我需要这样的东西
{
"2020-12-1" : {
1: 2, // 2 entries with no 1 team
2: 3, // 3 entries with no 2 team
// ...
},
"2020-12-2" : {
// ...
}
}
到目前为止,我有下面的代码行,它们给了我一个 json 对象。我需要帮助才能在该对象内或作为数组获得上述结果。如果有更好的方法可以做到这一点,请建议我。
TEAM_NO_COUNT = {}; // create an object
$.each(JSON.parse(JSON.stringify(arrayVal)), function (key, val) {
TEAM_NO_COUNT[val.DATE] = (TEAM_NO_COUNT[val.DATE] || 0);
});
alert(JSON.stringify(TEAM_NO_COUNT));
请有人指导我如何做到这一点?
解决方案
这可以通过一个相当简单的聚合来完成,使用reduce
:
var result = arrayVal.reduce( (acc,x) => {
if(!acc[x.DATE]) acc[x.DATE] = {}
if(!acc[x.DATE][x.TEAM_NO]) acc[x.DATE][x.TEAM_NO] = 0
acc[x.DATE][x.TEAM_NO]++
return acc;
}, {});
如您所见,不需要
- jQuery
$.each
JSON.parse(JSON.stringify(arrayVal))
- 数据已经是一个 javascript 数组
下面的实时示例:
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,
}];
var result = arrayVal.reduce( (acc,x) => {
if(!acc[x.DATE]) acc[x.DATE] = {}
if(!acc[x.DATE][x.TEAM_NO]) acc[x.DATE][x.TEAM_NO] = 0
acc[x.DATE][x.TEAM_NO]++
return acc;
}, {})
console.log(result)
推荐阅读
- javascript - 沉默拒绝了 beforeunload RuntimeMessage 的承诺 - sendMessage
- c++ - 方差与 Excel 中的不完全匹配
- java - org.apache.cxf.ws.policy.PolicyException:没有签名令牌
- amazon-web-services - 如何将 terraform 代码块作为输入传递给模块
- javascript - 如何从下面的 json 数据中获取单个值
- node.js - 如何使用 webpack5 将 nodejs 项目丑化和打包成字节码?
- typescript - 我如何在一个类中定义一个只返回类的一部分的方法
- apache-spark - 在写入 Elastic 之前聚合数据的工具
- python - 我怎样才能像这样在我的代码中进行翻译?
- python - 当我尝试运行以下代码时,出现此错误“NameError: name '__file__' is not defined”