working on an app I'm an intern, I need to join these JSON objects by name, weight, and all grades. I did it for name and weight and now we need to add grades, absolutely baffled no idea what to even google...
This is the function, code from var holder = {} down is the old algorithm, need a new one to join on multiple keys.
async function grade() {
try {
const data = await model.run_stock.findAll({
offset: 0,
limit: 200,
include: [
{
model: model.truerun,
attributes: { exclude: ["updatedAt", "batchId", "gradeListId"] },
include: [
{
model: model.batch,
attributes: [
"id",
"name",
"age",
"quantity",
"source",
"hatchery",
],
include: [
{
model: model.shellfish,
attributes: ["id", "name", "type", "species"],
},
],
},
{
model: model.grade_list,
attributes: ["id", "name", "alias"],
},
],
},
],
});
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;
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 = {
avgTotalWeight: avgTotalWeight,
name: name,
grade: {
grade1: grade1,
grade2: grade2,
grade3: grade3
}
};
a.push(b);
}
}
var holder = {};
a.forEach(function (d) {
if (holder.hasOwnProperty(d.name)) {
holder[d.name] = holder[d.name] + d.avgTotalWeight;
} else {
holder[d.name] = d.avgTotalWeight;
}
});
var obj2 = [];
for (var prop in holder) {
obj2.push({ name: prop, weight: holder[prop] });
}
return a;
} catch (err) {
throw err;
}
}
This is the postman request data.
{
"data": [
{
"avgTotalWeight": 16,
"name": "france Naicin",
"grade": {
"grade1": 16,
"grade2": 0,
"grade3": 0
}
},
{
"avgTotalWeight": 16,
"name": "pacific gigas",
"grade": {
"grade1": 16,
"grade2": 0,
"grade3": 0
}
},
{
"avgTotalWeight": 13,
"name": "france Naicin",
"grade": {
"grade1": 13,
"grade2": 0,
"grade3": 0
}
},
{
"avgTotalWeight": 14,
"name": "france Naicin",
"grade": {
"grade1": 14,
"grade2": 0,
"grade3": 0
}
},
{
"avgTotalWeight": 15,
"name": "france Naicin",
"grade": {
"grade1": 15,
"grade2": 0,
"grade3": 0
}
},
{
"avgTotalWeight": 16,
"name": "france Naicin",
"grade": {
"grade1": 16,
"grade2": 0,
"grade3": 0
}
},
{
"avgTotalWeight": 13,
"name": "france Naicin",
"grade": {
"grade1": 13,
"grade2": 0,
"grade3": 0
}
},
{
"avgTotalWeight": 12,
"name": "france Naicin",
"grade": {
"grade1": 12,
"grade2": 0,
"grade3": 0
}
},
{
"avgTotalWeight": 11,
"name": "france Naicin",
"grade": {
"grade1": 0,
"grade2": 11,
"grade3": 0
}
},
{
"avgTotalWeight": 10,
"name": "france Naicin",
"grade": {
"grade1": 10,
"grade2": 0,
"grade3": 0
}
},
{
"avgTotalWeight": 9,
"name": "france Naicin",
"grade": {
"grade1": 0,
"grade2": 0,
"grade3": 9
}
}
]
}
It is supposed to look like this in the end:
{
"name": "FranceNiance",
"total": 80,
"grades": {
"grade1": "30",
"grade2": "30",
"grade3": "20"
}, ....