在下面的对象中,是否可以基于square/go-jose: error in cryptographic primitive
合并值?
StudentID
我想要的输出是:
{
"moduleResults": [
{
"StudentID": "00001480",
"ModuleCode": "MED3007-N",
"AcYear": "2018/9",
"Mark": "80",
"Grade": "A"
},
{
"StudentID": "00001480",
"ModuleCode": "MED3020-N",
"AcYear": "2018/9",
"Mark": "82",
"Grade": "A"
}
]
}
答案 0 :(得分:1)
这里的另一个选择是使用.map()
和.find()
。在地图内部,您可以使用find函数查找重复项并将其添加到新数组中。
const data = {
"moduleResults": [
{
"StudentID": "00001480",
"ModuleCode": "MED3007-N",
"AcYear": "2018/9",
"Mark": "80",
"Grade": "A"
},
{
"StudentID": "00001480",
"ModuleCode": "MED3020-N",
"AcYear": "2018/9",
"Mark": "82",
"Grade": "A"
}
]
};
const newData = [];
data.moduleResults.map((o) => {
const dups = newData.find((nd) => {
return nd.StudentID === o.StudentID;
});
if (!dups) {
newData.push({
"StudentID": o.StudentID,
"ModuleCode": [o.ModuleCode],
"AcYear": o.AcYear,
"Mark": [o.Mark],
"Grade": [o.Grade]
})
} else {
dups.Mark.push(o.Mark);
dups.Grade.push(o.Grade);
dups.ModuleCode.push(o.ModuleCode);
}
return newData;
});
console.log(newData);
答案 1 :(得分:0)
const records = {
"moduleResults": [
{
"StudentID": "00001480",
"ModuleCode": "MED3007-N",
"AcYear": "2018/9",
"Mark": "80",
"Grade": "A"
},
{
"StudentID": "00001480",
"ModuleCode": "MED3020-N",
"AcYear": "2018/9",
"Mark": "82",
"Grade": "A"
}
]
};
const mergedRecords =
Array.from(
records.moduleResults
.reduce(
(acc, val) => {
if(!acc.has(val.StudentID)) {
acc.set(
val.StudentID,
{
...val,
ModuleCode: [val.ModuleCode],
Mark: [val.Mark],
Grade: [val.Grade]
}
)
} else {
const record = acc.get(val.StudentID);
acc.set(val.StudentID, {
...record,
ModuleCode: [...record.ModuleCode, val.ModuleCode],
Mark: [...record.Mark, val.Mark],
Grade: [...record.Grade, val.Grade]
});
}
return acc;
},
new Map()
).values()
);