【问题标题】:JS count object match some same valueJS计数对象匹配一些相同的值
【发布时间】:2021-01-08 20:32:40
【问题描述】:

我有一个这样的 json:

 [{
          "semester":"1",
          "classification":"Excellent",
          "schoolYear":"2018"
       },
       {
          "semester":"2",
          "classification":"Intermediate",
          "schoolYear":"2018"
       },
       {
          "semester":"1",
          "classification":"Excellent",
          "schoolYear":"2018"
       },
       {
          "semester":"2",
          "classification":"Good",
          "schoolYear":"2017"
       },
       {
          "semester":"1",
          "classification":"Excellent",
          "schoolYear":"2017"
       },
       {
          "semester":"2",
          "classification":"Good",
          "schoolYear":"2017"
       },
       {
          "semester":"1",
          "classification":"Excellent",
          "schoolYear":"2017"
       },
       {
          "semester":"2",
          "classification":"Fail",
          "schoolYear":"2017"
       },
       {
          "semester":"1",
          "classification":"Good",
          "schoolYear":"2017"
       }]

我希望通过函数按照这种格式输出:

[
  {
    schoolYear: '2018',
    semesters: [
      {
        Excellent: 2,
        Good: 0,
        Intermediate: 0,
        Average: 0,
        Weak: 0,
        Fail: 0
      },
      {
        Excellent: 0,
        Good: 0,
        Intermediate: 1,
        Average: 0,
        Weak: 0,
        Fail: 0
      }
    ]
  },
  {
    schoolYear: '2017',
    semesters: [
      {
        Excellent: 3,
        Good: 1,
        Intermediate: 0,
        Average: 0,
        Weak: 0,
        Fail: 0
      },
      {
        Excellent: 0,
        Good: 2,
        Intermediate: 0,
        Average: 0,
        Weak: 0,
        Fail: 1
      }
    ]
  }
]

如您所见,输出是一个数组,数组中的每个元素都有 2 个属性,schoolYear 是一个字符串,semesters 是一个仅包含 2 个元素的数组,索引 0 处的第一个元素是"semester": "1" 根据输入,索引 1 处的第二个元素是 "semester": "2",当然。

我要感谢您抽出时间帮助我,您可以在此codeandbox演示here中修改代码,再次感谢您,祝您有美好的一天

【问题讨论】:

    标签: javascript arrays json format frontend


    【解决方案1】:

    这是一个工作示例:

    var obj = [
        {
            semester: "1",
            classification: "Excellent",
            schoolYear: "2018"
        },
        {
            semester: "2",
            classification: "Intermediate",
            schoolYear: "2018"
        },
        {
            semester: "1",
            classification: "Excellent",
            schoolYear: "2018"
        },
        {
            semester: "2",
            classification: "Good",
            schoolYear: "2017"
        },
        {
            semester: "1",
            classification: "Excellent",
            schoolYear: "2017"
        },
        {
            semester: "2",
            classification: "Good",
            schoolYear: "2017"
        },
        {
            semester: "1",
            classification: "Excellent",
            schoolYear: "2017"
        },
        {
            semester: "2",
            classification: "Fail",
            schoolYear: "2017"
        },
        {
            semester: "1",
            classification: "Good",
            schoolYear: "2017"
        }
    ];
    const formatArray = (oldArray) => {
    
        const newArray = [];
        oldArray.forEach((oldEntry) => {
            let newObjIndex = newArray.findIndex((e) => e.schoolYear === oldEntry.schoolYear);
            if (newObjIndex === -1) {
                newArray.push({
                    schoolYear: oldEntry.schoolYear
                });
                newObjIndex = newArray.length - 1;
            }
            if (!newArray[newObjIndex].semester) {
                newArray[newObjIndex].semester = [];
            }
            if (!newArray[newObjIndex].semester[oldEntry.semester]) {
                newArray[newObjIndex].semester[oldEntry.semester] = {};
            }
            newArray[newObjIndex].semester[oldEntry.semester][oldEntry.classification] = newArray[newObjIndex].semester[oldEntry.semester][oldEntry.classification]
                ? newArray[newObjIndex].semester[oldEntry.semester][oldEntry.classification] + 1
                : 1;
        });
        return newArray;
    };
    console.log(formatArray(obj));

    【讨论】:

    • 非常感谢您的帮助,这是我的毕业论文,您推动了我的进步,让我更快地完成它,非常感谢,非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 2018-12-06
    • 2019-08-30
    • 2021-11-19
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多