如何在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()    
    );