如何解决计算 json 数组对象并使用 SUM 结果创建一个新数组
const arrayVal = [{
"DATE": "2020-12-1","NAME": "JAKE","TEAM_NO": 2,},{
"DATE": "2020-12-1","NAME": "ANNA","NAME": "JEFF","TEAM_NO": 1,"NAME": "ERIKA","NAME": "SUTTON","TEAM_NO": 3,"NAME": "ARNOLD",{
"DATE": "2020-12-2","TEAM_NO": 4,"TEAM_NO": 5,{
"DATE": "2020-12-3",}];
我只是想从上面的数组中获得低于某种结果。在这里,我想按天计算团队人数并使用“TEAM_NO_COUNT”参数创建一个新数组。
[{
"DATE": "2020-12-1","TEAM_NO_COUNT": 2,// 2 entries with no 3 team
},// 2 entries with no 1 team
},"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 = [{
"DATE": "2020-12-1","NAME": "JAKE","TEAM_NO": 2,},{
"DATE": "2020-12-1","NAME": "ANNA","NAME": "JEFF","TEAM_NO": 1,"NAME": "ERIKA","NAME": "SUTTON","TEAM_NO": 3,"NAME": "ARNOLD",{
"DATE": "2020-12-2","TEAM_NO": 4,"TEAM_NO": 5,{
"DATE": "2020-12-3",}];
let finalArray = [];
arrayVal.forEach((x) => {
if (finalArray.length == 0) {
finalArray.push({
DATE: x.DATE,TEAM_NO: x.TEAM_NO,TEAM_NO_COUNT: 1
});
} else {
let indexI,flag = false;
finalArray.forEach((i,index) => {
if (x.TEAM_NO == i.TEAM_NO && x.DATE== i.DATE) {
indexI = index;
flag = true;
}
});
if (!flag) {
finalArray.push({
DATE: x.DATE,TEAM_NO_COUNT: 1
});
} else {
finalArray[indexI]["TEAM_NO_COUNT"] += 1;
}
}
});
console.log(finalArray);
功能解决方案:
reduce() 方法对数组的每个元素执行一个 reducer 函数(您提供的),从而产生单个输出值。
reducer 函数接受四个参数:累加器、当前值、当前索引和源数组
更多信息见:MDN Web Docs - Reduce()
const arrayVal = [{
"DATE": "2020-12-1",}];
const result = arrayVal.reduce((curr,entry) => {
const {DATE,NAME,TEAM_NO} = entry;
const newEntry = {DATE,TEAM_NO,"TEAM_NO_COUNT": 1};
const currEntry = curr.find(currEntry => currEntry.DATE === DATE && currEntry.TEAM_NO === TEAM_NO);
if(currEntry == null) {
return [...curr,{...newEntry}];
} else {
return [
...curr.filter(currEntry => !(currEntry.DATE === DATE && currEntry.TEAM_NO === TEAM_NO)),{...newEntry,"TEAM_NO_COUNT": currEntry.TEAM_NO_COUNT + 1}
];
}
},[]);
console.log(result);
按照这个方向,您可以重建整个对象阵列。如果您需要扩展此数据,这将非常有用。例如,如果您想包含球员姓名列表。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。