如何在JavaScript中合并两个对象的值
在下面的对象中,是否可以基于如何在JavaScript中合并两个对象的值,javascript,javascript-objects,Javascript,Javascript Objects,在下面的对象中,是否可以基于StudentID合并值 { "moduleResults": [ { "StudentID": "00001480", "ModuleCode": "MED3007-N", "AcYear": "2018/9", "Mark": "80", "Grade": "A" }, { "StudentID": "00001480",
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"]
}
这里的另一个选项是使用
.map()
和.find()
。在地图中,您可以使用find函数查找重复项并添加到新数组中
const数据={
“模块结果”:[
{
“学生ID”:“00001480”,
“模块代码”:“MED3007-N”,
“AcYear”:“2018/9”,
“标记”:“80”,
“等级”:“A”
},
{
“学生ID”:“00001480”,
“模块代码”:“MED3020-N”,
“AcYear”:“2018/9”,
“标记”:“82”,
“等级”:“A”
}
]
};
常量newData=[];
data.moduleResults.map((o)=>{
const dups=newData.find((nd)=>{
返回nd.StudentID==o.StudentID;
});
如果(!dups){
newData.push({
“StudentID”:o.StudentID,
“模块代码”:[o.ModuleCode],
“AcYear”:o.AcYear,
“标记”:[o.Mark],
“等级”:[o级]
})
}否则{
重复标记推动(o标记);
双级推送(o级);
重复模编码推送(o模编码);
}
返回新数据;
});
console.log(newData)
我确信lodash有一些你可以使用的东西,或者你可以创建一个自定义函数,这很简单,到目前为止你尝试了什么?我在这里回答了一个类似的问题:这里也有这个答案:
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()
);