Javascript 合并具有相同id的数组
这是我的 我想合并具有相同_id的阵列,即86ded3fdfc5f92724491f82。我如何才能做到这一点? 我这样做是为了创建数组Javascript 合并具有相同id的数组,javascript,arrays,node.js,push,Javascript,Arrays,Node.js,Push,这是我的 我想合并具有相同_id的阵列,即86ded3fdfc5f92724491f82。我如何才能做到这一点? 我这样做是为了创建数组 dinnerDrug.push({ '_id': value._id, 'name': value.medicine_name, 'count': value.dose_dinner_count, 'type': value.medicine_type, 'consume': value.dose_dinner_cons
dinnerDrug.push({
'_id': value._id,
'name': value.medicine_name,
'count': value.dose_dinner_count,
'type': value.medicine_type,
'consume': value.dose_dinner_consume,
'comment': value.medicine_comment
});
dinnerArray.push({
'_id': value.doctor_id,
'doctor_name': value.doctor_name,
'doctor_dept': 'Cardiologist',
'prescription': dinnerDrug
});
我试着像这样去掉那个小家伙
morningArray.forEach(function(val) {
if (val._id == value.doctor_id) {
morningArray.prescription.push(morningDrug)
} else {
morningArray.push({
'_id': value.doctor_id,
'doctor_name': value.doctor_name,
'doctor_dept': 'Cardiologist',
'prescription': morningDrug
});
}
});
但是复制数组并没有被删除,相反,它会显示错误,因为push是未定义的。我犯了什么错误?我该如何纠正
预期输出应如下所示:
{
"_id": "586ded3fdfc5f92724491f82",
"doctor_name": "asd asd",
"doctor_dept": "Cardiologist",
"prescription": [
{
"_id": "586dfdbe98c23d1a200cfb3f",
"name": "ALPHACAINE N, solution injectable à usage dentaire",
"count": "1",
"type": "0",
"consume": "0",
"comment": "test"
},
{
"_id": "586dfda498c23d1a200cfb3b",
"name": "ALPHACAINE N, solution injectable à usage dentaire",
"count": "1",
"type": "0",
"consume": "0",
"comment": "test"
}
]
}
注意:我只想在javascript中执行此操作,您可以为
\u id
使用哈希表,并检查是否存在具有哈希的对象。如果不使用实际元素创建新哈希,则将perscriptions添加到哈希表的对象并拼接数组
var数据={success:“1”,处方数据:[{id:“586C95A4CE997012A44F77C”,医生姓名:“新医生”,医生科室:“心脏病专家”,处方:[{id:“586c9f48fa0e603670cb01ae”,姓名:“ASCOFER 33 mg,gélule”,计数:“1”,类型:“0”,消费:“0”,注释:“asdfd”},{id:“586DED3FDFC5F924491F82”,医生姓名:“asd asd”,医生科室:“心脏病专家”,处方:[{id:“586dfda498c23d1a200cfb3b”,姓名:“阿尔法凯恩N,溶液可注射,使用次数”,计数:“1”,类型:“0”,消费:“0”,注释:“测试”}},{id:“586ded3fdfc5f92724491f82”,医生姓名:“asd asd”,医生科室:“心脏病专家”,处方:[id:“586dfdbe98c23d1a200cfb3f”,姓名:“ALPHACAINE N,可注射溶液的使用量”,计数:“1”,类型:“0”,消耗:“0”,注释:“测试”}]},
hash=Object.create(null),
i=0;
而(i
.as控制台包装{max height:100%!important;top:0;}
使用唯一的\u id
键将处方数据
还原为对象映射,然后返回该对象的值
var数据={“成功”:“1”,“处方数据”:[{“id”:“586C95A4CE997012A44F77C”,“医生姓名”:“新医生”,“医生科室”:“心脏病专家”,“处方”:[{“id”:“586c9f48fa0e603670cb01ae”,“姓名”:“ASCOFER 33 mg,gélule”,“计数”:“1”,“类型”:“0”,“消耗”:“0”,“注释”:“asdfd”},{“asdfd id”:“586DED3FDFC5F9244912”,“asd医生姓名”:“asd”医生科室“:”心脏病专家“,”处方“:”{“{”id:”586dfda498c23d1a200cfb3b“,”姓名“:”阿尔法凯恩N,溶液注射使用量“,”计数“:”1“,”类型“:”0“,”消费“:”0“,”注释“:”测试“}],”{”id:”586DED3FDFC5F924491F82“,”医生姓名“:”asd asd“,”医生科室“,”心脏病专家“,”处方“:”[{”id:”586dfdbe98c23d1a200cfb3f“,”姓名“:”ALPHACAINE N,溶液可注射??用法dentaire,“计数”:“1”,“类型”:“0”,“消耗”:“0”,“注释”:“测试”}]};
data.prescription\u data=Object.values(data.prescription\u data.reduce)(函数(aggr,项){
if(累计[项目编号]){
aggr[item.\u id]。时效=aggr[item.\u id]。时效.concat(item.prescription);
}否则{
aggr[项目编号]=项目;
}
返回aggr;
},{}));
console.log(data);
我提出了一个简单明了的解决方案。问题是,Array.indexOf在对象上不起作用,所以“filter”方法有一个小助手,它使用“_id”字段作为药物对象的id。
使用ECMAScript 5
var srcObj={“成功”:“1”,“处方数据”:[{“id”:“586c95a4ce997012a44f777c”,“医生姓名”:“新医生”,“医生部”:“心脏病专家”,“处方”:[{“id”:“586c9f48fa0e603670cb01ae”,“姓名”:“ASCOFER 33 mg,gélule”,“计数”:“1”,“类型”:“0”,“消费”:“0”,“注释”:“asdfd”},{“asdfd id”:“586DED3F45F9244912”,“asd”:“医生姓名”,“asd”:“asd”:”医生科室“:”心脏病专家“,”处方“:”{“{”id:”586dfda498c23d1a200cfb3b“,”姓名“:”阿尔法凯恩N,溶液注射使用量“,”计数“:”1“,”类型“:”0“,”消费“:”0“,”注释“:”测试“}],”{”id:”586DED3FDFC5F924491F82“,”医生姓名“:”asd asd“,”医生科室“,”心脏病专家“,”处方“:”[{”id:”586dfdbe98c23d1a200cfb3f“,”姓名“:”ALPHACAINE N,溶液可注射??用法dentaire,“计数”:“1”,“类型”:“0”,“消耗”:“0”,“注释”:“测试”}]};
var indexOfId=功能(arr,obj){
用于(arr中的var objIdx){
if(arr[objIdx]。\u id==obj.\u id)返回objIdx;
}
}
srcObj.prescription_data=srcObj.prescription_data.filter((o,i,a)=>indexOfId(a,o)==i);
console.log(srcObj);
这可能会有所帮助:当您检查重复项时,我想这行morningArray.prescription.push(morningDrug)
应该是val.prescription.push(morningDrug)
morningArray
没有任何prescription
属性,是吗?我也试过了。val.prescription.push(晨药)
仍然使数组为空yourArray={…,处方数据:[{…处方:[{{P1}]},{…},};
。为什么每个处方都是一个[{}]
,因为数组似乎总是只有一个元素?而不仅仅是一个{}
,现在让我试试同样的方法