【发布时间】:2021-05-20 14:50:49
【问题描述】:
我有一个带有数据的 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",
avgTotalWeight: 16,
grade: {
grade1: 16,
grade2: 0,
grade3: 0,
},
},
{
name: "france Naicin",
avgTotalWeight: 13,
grade: {
grade1: 13,
grade2: 0,
grade3: 0,
},
},
{
name: "france Naicin",
avgTotalWeight: 14,
grade: {
grade1: 14,
grade2: 0,
grade3: 0,
},
},
{
name: "france Naicin",
avgTotalWeight: 15,
grade: {
grade1: 15,
grade2: 0,
grade3: 0,
},
},
],
我获取这个 json 的代码:
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;
【问题讨论】:
-
您能补充一下您的预期结果吗?
-
{ "name": "france Naicin", "avgTotalWeight": 36, "grade": { "grade1": 16, "grade2": 10, "grade3": 10 } }, { "name": "pacific gigas", "avgTotalWeight": 46, "grade": { "grade1": 16, "grade2": 10, "grade3": 20 } },
-
对不起格式,但只是按名称、总权重和每个等级的总权重分组的不同名称下的总计
-
france Naicin的avgTotalWeight是36。难道不应该是58 -
是的,很抱歉数据中有更多条目我刚刚舀了前几个对象,它应该只是总数,无论总数应该是多少!
标签: javascript json object nested reduce