如何解决嵌套对象减少分组和求和 - javascript
我有一个带有数据的 json 对象,我需要按名称对这些对象进行分组,按名称对权重求和,然后对成绩求和。我已经尝试了2天了。它应该看起来像 {name,weightTotal,grade{grade1total:,grade2total,grade2total}}...我查看了大约 30 个堆栈 qs 并尝试减少和 foreach groupby 并且我不明白其中任何一个,我是第三名一年级学生做我的第一个实习。需要它在前端进展以将这些显示为表格。顺便说一下,这些来自休息端点。
数据
"data": [
{
name: "france Naicin",avgTotalWeight: 16,grade: {
grade1: 16,grade2: 0,grade3: 0,},{
name: "pacific gigas",{
name: "france Naicin",avgTotalWeight: 13,grade: {
grade1: 13,avgTotalWeight: 14,grade: {
grade1: 14,avgTotalWeight: 15,grade: {
grade1: 15,],
let a = [];
for (let i = 0; i <= data.length; i++) {
if (!data[i]) {
continue;
}
const {avgTotalWeight} = data[i];
const {name} = data[i].truerun.batch.shellfish;
const {alias} = data[i].truerun.grade_list;
const {updatedAt} = data[i];
const {isExist} = data[i].truerun;
if (avgTotalWeight !== null) {
let grade1,grade2,grade3 = 0;
if (alias === "G1") {
grade1 = avgTotalWeight;
} else grade1 = 0;
if (alias === "G2") {
grade2 = avgTotalWeight;
} else grade2 = 0;
if (alias === "G3") {
grade3 = avgTotalWeight;
} else grade3 = 0;
let b = {
name: name,avgTotalWeight: avgTotalWeight,//updatedAt: updatedAt,//isExist: isExist,grade: {
grade1: grade1,grade2: grade2,grade3: grade3,};
a.push(b);
}
}
return a;
解决方法
您可以使用 reduce
轻松实现此结果如果某些情况下 grade
键增加,那么您可以添加动态代码,以便它可以与 grade
中的无限键一起使用。直接替换
isExist.grade.grade1 += grade.grade1;
isExist.grade.grade2 += grade.grade2;
isExist.grade.grade3 += grade.grade3;
与
Object.keys(isExist.grade).forEach((key) => {
isExist.grade[key] += curr.grade[key];
});
const obj = {
data: [
{
name: "france Naicin",avgTotalWeight: 16,grade: {
grade1: 16,grade2: 0,grade3: 0,},{
name: "pacific gigas",{
name: "france Naicin",avgTotalWeight: 13,grade: {
grade1: 13,avgTotalWeight: 14,grade: {
grade1: 14,avgTotalWeight: 15,grade: {
grade1: 15,],};
const result = obj.data.reduce((acc,curr) => {
const { name,avgTotalWeight,grade } = curr;
const isExist = acc.find((o) => o.name === name);
if (isExist) {
isExist.weightTotal += avgTotalWeight;
isExist.grade.grade1 += grade.grade1;
isExist.grade.grade2 += grade.grade2;
isExist.grade.grade3 += grade.grade3;
} else {
acc.push({
name,weightTotal: avgTotalWeight,grade,});
}
return acc;
},[]);
console.log(result);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。