微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决计算 json 数组对象并使用 SUM 结果创建一个新数组

我有一个像这样的 JSON 数组,

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 举报,一经查实,本站将立刻删除。