Javascript nodejs中两个数组之间的项搜索

Javascript nodejs中两个数组之间的项搜索,javascript,arrays,node.js,reduce,ramda.js,Javascript,Arrays,Node.js,Reduce,Ramda.js,我有两个补丁,第一个补丁是dataMedical,它有一个名为safeId的属性,我需要它在dataSafe数组中查找它的名称,它们由id属性safeId关联 *请记住,dataMedical可以有N项和dataSafe* 因此,我需要: dataMedicalResult = [ { _id: 5da619b36aae5e7028fc27db, paciente: 5de31abf4c430918a39a7490, seguroAfiliado

我有两个补丁,第一个补丁是dataMedical,它有一个名为safeId的属性,我需要它在dataSafe数组中查找它的名称,它们由id属性safeId关联

*请记住,dataMedical可以有N项和dataSafe*

因此,我需要:

dataMedicalResult = [
    {
       _id: 5da619b36aae5e7028fc27db,
       paciente: 5de31abf4c430918a39a7490,
       seguroAfiliado: 5d65da2f008b72055d17abfb,
       fecha: '2019-10-01T03:00:00.000Z',
       motivoConsulta: 'dww',
       nameSafe: 'La Seguridad',
       email: 'info@laseguridad.com.ve',
       numeroPoliza: '123456',
       pais: 'fdsaafsd',
       baremo: 'afdafds',
       actoQuirurgico: 'fsdasafd',
    }
]
请重试所有代码并回答我以下问题:

https://ramdajs.com/repl/?v=0.26.1#?%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%22%24__%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22strictMode%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22selected%22%3A%20%7B%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22getters%22%3A%20%7B%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22_id%22%3A%20%225da619b36aae5e7028fc27db%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22wasPopulated%22%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22activePaths%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22paths%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22_id%22%3A%20%22init%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22paciente%22%3A%20%22init%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22seguroAfiliado%22%3A%20%22init%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22fecha%22%3A%20%22init%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22motivoConsulta%22%3A%20%22init%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22__v%22%3A%20%22init%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22states%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22ignore%22%3A%20%7B%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22default%22%3A%20%7B%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22init%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22_id%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22paciente%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22seguroAfiliado%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22fecha%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22motivoConsulta%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22__v%22%3A%20true%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22modify%22%3A%20%7B%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22require%22%3A%20%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22stateNames%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22require%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22modify%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22init%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22default%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22ignore%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22pathsToScopes%22%3A%20%7B%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22cachedRequired%22%3A%20%7B%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22session%22%3A%20null%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%24setCalled%22%3A%20%7B%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22emitter%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22_events%22%3A%20%7B%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22_eventsCount%22%3A%200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22_maxListeners%22%3A%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%24options%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22skipId%22%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22isNew%22%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22willInit%22%3A%20true%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%22isNew%22%3A%20false%2C%0A%20%20%20%20%20%20%20%20%22_doc%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22_id%22%3A%20%225da619b36aae5e7028fc27db%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22paciente%22%3A%20%225de31abf4c430918a39a7490%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22seguroAfiliado%22%3A%20%225d65da2f008b72055d17abfb%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22fecha%22%3A%20%222019-10-01T03%3A00%3A00.000Z%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22motivoConsulta%22%3A%20%22dww%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22__v%22%3A%200%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%22%24locals%22%3A%20%7B%7D%2C%0A%20%20%20%20%20%20%20%20%22%24init%22%3A%20true%0A%20%20%20%20%7D%0A%5D
当前答案:

使用值“safes”和“citasMedicas”修改代码:

邮差结果:

试试这个:

console.log(dataSafe.reduce((acc,el)=> {
  const dm = dataMedical.find(dam => dam["_id"] === el["_id"]);  
  return dm ? [...acc, Object.assign(el, dm)] : acc;
}, []))

你喜欢这个工作吗?它在两个数组中搜索给定的id,然后将找到的两个对象合并在一起

const dataMedical=[{
“_id”:“1”,
“pacient”:“Jhon”,
“安全ID”:“1”,
“数据”:“2019-10-01T03:00:00.000Z”,
“咨询”:“dww”,
“_v”:0
}]
常量数据安全=[{
“_id”:“1”,
“名称安全”:“La Seguridad”
},
{
“_id”:“2”,
“名称安全”:“Mappfre”
}
]
功能查找记录(id){
const medical=dataMedical.find(r=>r.\u id==id)
const safe=dataSafe.find(r=>r.\u id==id)
返回{
医学的
…安全的
}
}
const dataMedicalResult=findRecord(“1”)

console.log(dataMedicalResult)
您可以使用数组查找函数来定位正确的dataSafe元素。我们将映射dataMedical中的每个元素,并使用safeId找到正确的dataSafe。然后,我们将通过nameSafe属性复制到保险箱

let dataMedical=[
{
“_id”:“1”,
“pacient”:“Jhon”,
“安全ID”:“1”,
“数据”:“2019-10-01T03:00:00.000Z”,
“咨询”:“dww”,
“_v”:0
}
]
设dataSafe=[
{
“_id”:“1”,
“名称安全”:“La Seguridad”
},
{
“_id”:“2”,
“名称安全”:“Mappfre”
}
]
让dataMedicalResult=dataMedical.map(dm=>{
让safe=dataSafe.find(e=>e.\u id==dm.safeId);
保险箱
?{…dm,nameSafe:safe.nameSafe}
:dm;
})
控制台日志(dataMedicalResult)这也有帮助,
我认为尝试用一种更复杂的方法来获得无点的结果

constmergewithdatasafe=(合并,数据)=>merge(
(item)=>R.mergeRight(item,R.path([item.safeId,0],data)),
);
const aggregate=R.useWith(mergeWithDataSafe[
R.flip(R.map),
R.groupBy(R.prop(“u id”),
]);
常数数据医疗=[
{
“_id”:“1”,
“pacient”:“Jhon”,
“安全ID”:“1”,
“数据”:“2019-10-01T03:00:00.000Z”,
“咨询”:“dww”,
“_v”:0
}
];
常量数据安全=[
{
“_id”:“1”,
“名称安全”:“La Seguridad”
},
{
“_id”:“2”,
“名称安全”:“Mappfre”
}
];
console.log(
聚合(数据医疗、数据安全),
);

您可以使用
R.indexBy
dataSafe
数组转换为字典,使用
\u id
作为键。现在,您可以映射
dataMedical
,并从
safeDict
与具有相同
safeId
的项目合并:

const{curry,indexBy,prop,merge}=R;
const fn=咖喱(医疗、安全)=>{
const safeDict=indexBy(prop('u id'),safe);//将safe数组转换为以'u id'为键的字典
返回medical.map(o=>merge(safeDict[o.safeId],o));//映射medical并与safeDict中具有相同_id的对象合并
});
const dataMedical=[{“_id”:“1”,“pacient”:“Jhon”,“safeId”:“1”,“data”:“2019-10-01T03:00:00.000Z”,“consult”:“dww”,“_v”:0}];
const dataSafe=[{u id:“1”,“nameSafe:“La Seguridad”},{u id:“2”,“nameSafe:“Mappfre”}];
const result=fn(数据医疗、数据安全)
console.log(结果)

我可以这样写:

const-enhance=(安全)=>(
医学,
{{u id,…rest}=safe.find({u id})=>{u id==med.safeId){124;}
)=>({…med,…rest})
const enhanceAll=(安全)=>R.map(增强(安全))
const dataMedical=[{{u id:“1”,pacient:“Jhon”,safeId:“1”,数据:“2019-10-01T03:00:00.000Z”,参考:“dww”,第五部分:0}]
const dataSafe=[{u id:“1”,nameSafe:“La Seguridad”},{u id:“2”,nameSafe:“Mappfre”}]
控制台日志(
enhanceAll(数据安全)(数据医疗)
)

这是否回答了您的问题?我猜这是向后的,OP希望
dataMedical
中的所有项目都与
dataSafe
中的对应项进行增强。这增强了
dataSafe
中的项目。我在>中复制代码,一切正常,但在nodejs中我执行>var R=require('ramda');有什么建议吗?我在>中复制代码,一切正常,但在nodejs中我执行>var R=require('ramda');有什么建议吗?这个链接是空的,如果你能看到你扔给我的结果,请编辑这个问题并粘贴一个链接。我在>中复制代码,一切正常,但在nodejs中我执行>var R=require('ramda');有什么建议吗?我在>中复制代码,一切正常,但在nodejs中我执行>var R=require('ramda');有什么建议吗?我在>中复制代码,一切正常,但在nodejs中我执行>var R=require('ramda');有什么建议吗?替换
const{curry,indexBy,prop,merge}=R使用
const{curry,indexBy,prop,merge}=require('ramda')
。如果你能看到你扔给我的结果,请编辑问题并粘贴一个链接。我在>中复制代码,一切正常,但在nodejs中我执行>var R=require('ramda');“有什么建议吗?对不起,”丹尼萨拉扎,我不知道你在问什么。这在Ramda REPL中运行良好。(这就是我开发它的地方。)它在节点环境中工作,例如在中。谢谢Scott,请不要向我解释,如果结果在我刚才编辑时发生更改,则结果为空。@DenisAlayza:但是您更改了正在比较的属性的名称。您需要更改代码以匹配,即将
safeId
更改为
segurafiliado
。请参阅中的更新
console.log(dataSafe.reduce((acc,el)=> {
  const dm = dataMedical.find(dam => dam["_id"] === el["_id"]);  
  return dm ? [...acc, Object.assign(el, dm)] : acc;
}, []))