如何解决JS计数对象匹配一些相同的值
我有一个像这样的json:
[{
"semester":"1","classification":"Excellent","schoolYear":"2018"
},{
"semester":"2","classification":"Intermediate",{
"semester":"1","classification":"Good","schoolYear":"2017"
},"classification":"Fail","schoolYear":"2017"
}]
并且我希望通过函数遵循以下格式的输出:
[
{
schoolYear: '2018',semesters: [
{
Excellent: 2,Good: 0,Intermediate: 0,Average: 0,Weak: 0,Fail: 0
},{
Excellent: 0,Intermediate: 1,Fail: 0
}
]
},{
schoolYear: '2017',semesters: [
{
Excellent: 3,Good: 1,Good: 2,Fail: 1
}
]
}
]
如您所见,输出是一个数组,该数组中的每个元素都有2个属性,schoolYear是一个String,学期是一个仅包含2个元素的数组,索引0的第一个元素用于根据输入,“ semester”:“ 1”,索引1处的第二个元素当然是“ semester”:“ 2”。
我想说谢谢您抽出宝贵的时间来帮助我,您可以在codesandbox演示here中修改代码,再次感谢您,并祝您生活愉快
解决方法
这是一个可行的示例:
var obj = [
{
semester: "1",classification: "Excellent",schoolYear: "2018"
},{
semester: "2",classification: "Intermediate",{
semester: "1",classification: "Good",schoolYear: "2017"
},classification: "Fail",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));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。