Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 合并具有相同id的数组_Javascript_Arrays_Node.js_Push - Fatal编程技术网

Javascript 合并具有相同id的数组

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

这是我的

我想合并具有相同_id的阵列,即86ded3fdfc5f92724491f82。我如何才能做到这一点? 我这样做是为了创建数组

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}]},{…},};
。为什么每个处方都是一个
[{}]
,因为数组似乎总是只有一个元素?而不仅仅是一个
{}
,现在让我试试同样的方法