在下面的对象中,是否可以基于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"
}
]
}
我想要的输出是:
{
"StudentID": "00001480",
"ModuleCode": ["MED3007-N","MED3020-N"],
"AcYear": "2018/9",
"Mark":["80","82"],
"Grade": ["A","A"]
}
您可以在没有ES6的情况下这样做:
var src = {
"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"
}
]
}
var res = []
for (n = 0; n < src["moduleResults"].length; n++) {
var srcEl = src["moduleResults"][n]
var i = res.findIndex(el => el.StudentID === srcEl.StudentID)
if (i === -1) {
res.push(srcEl)
} else {
if (typeof res[i]["Mark"] !== "string") {
res[i]["Mark"].push(srcEl["Mark"])
} else {
res[i]["Mark"] = [res[i]["Mark"], srcEl["Mark"]]
}
if (Array.isArray(res[i]["Grade"])) {
res[i]["Grade"].push(srcEl["Grade"])
} else {
res[i]["Grade"] = [res[i]["Grade"], srcEl["Grade"]]
}
}
}
console.log(res)