如何通过比较两个不同的唯一属性来对不同大小的对象数组中的元素进行分组?在javascript中
我有两个从聚合函数中获得的不同对象数组,因为我使用的是两个不同的集合 我尝试过使用这里描述的map函数,但它不能解决我的问题,我还能做什么来获得期望的结果如何通过比较两个不同的唯一属性来对不同大小的对象数组中的元素进行分组?在javascript中,javascript,mongodb,typescript,lodash,Javascript,Mongodb,Typescript,Lodash,我有两个从聚合函数中获得的不同对象数组,因为我使用的是两个不同的集合 我尝试过使用这里描述的map函数,但它不能解决我的问题,我还能做什么来获得期望的结果 qrySearch = [{ sName: 'SomePlace1', lBusinessID: 37343, SystemID: 5000152 }, { sName: 'SomePlace2', lBusinessID: 39780, SystemID: 5000156 },
qrySearch = [{
sName: 'SomePlace1',
lBusinessID: 37343,
SystemID: 5000152
},
{
sName: 'SomePlace2',
lBusinessID: 39780,
SystemID: 5000156
},
{
sName: 'SomePlace3',
lBusinessID: 50772,
SystemID: 5000519
},
{
sName: 'SomePlace4',
lBusinessID: 31079,
SystemID: 5000384
}
]
及
尝试后,结果仅为此数组:
qrySearch = [{
sName: 'SomePlace1',
lBusinessID: 37343,
SystemID: 5000152
},
{
sName: 'SomePlace2',
lBusinessID: 39780,
SystemID: 5000156
},
{
sName: 'SomePlace3',
lBusinessID: 50772,
SystemID: 5000519
},
{
sName: 'SomePlace4',
lBusinessID: 31079,
SystemID: 5000384
},
]
为了简单起见,我保持了数组的简短。我需要比较_ID,如果它与所需输出的sName匹配:
result = [{
sName: 'SomePlace1',
lBusinessID: 37343,
SystemID: 5000152,
LocalLabID: '123f',
AppLabID: 3,
count: 15
},
{
sName: 'SomePlace2',
lBusinessID: 39780,
SystemID: 5000156,
LocalLabID: '12BC',
AppLabID: 3,
count: 40
},
{
sName: 'SomePlace3',
lBusinessID: 50772,
SystemID: 5000519
},
{
sName: 'SomePlace4',
lBusinessID: 31079,
SystemID: 5000384
}
]
我尝试使用以下示例:
var result = qrySearch.map((e, _) =>
(_ = qrySearchLocID.find((q) => q._ID=== e.sName)) ?
{ ...e, ...{ _ID: _._ID} } : e);
但结果中缺少计数 您也可以将占位符
展开以合并值
const qrySearch=[{
sName:“某处1”,
lBusinessID:37343,
系统ID:5000152
},
{
sName:“某处2”,
lBusinessID:39780,
系统ID:5000156
},
{
sName:“某处3”,
lBusinessID:50772,
系统ID:5000519
},
{
sName:“某处4”,
lBusinessID:31079,
系统ID:5000384
},
];
常数qrySearchLocID=[{
LocalLabID:'123f',
_ID:'SomePlace1',
阿帕比德:3,
计数:15
},
{
LocalLabID:'12BC',
_ID:'SomePlace2',
阿帕比德:3,
计数:40
},
];
var res=qrySearch.map((e,))=>
(qrySearchLocID.find((q)=>q.ID==e.sName))?
{…e,…}:e);
控制台日志(res)
创建一个包含两个数组的流,按sName
或\u ID
对它们进行分组,并将所有组映射到新的合并对象:
const{flow,concat,groupBy,map,merge,partiOK:pr}=;
const combine=流量(
康卡特,
pr(groupBy,o=>o.sName | | o.| u ID),
pr(map,g=>merge({},…g))
);
const qrySearch=[{“sName”:“SomePlace1”,“lBusinessID”:37343,“SystemID”:5000152},{“sName”:“SomePlace2”,“lBusinessID”:39780,“SystemID”:5000156},{“sName”:“SomePlace3”,“lBusinessID”:50772,“SystemID”:5000519},{“sName”:“SomePlace4”,“lBusinessID”:31079,“SystemID”:5000384};
const qrysarchlocid=[{“LocalLabID”:“123f”,“_ID”:“SomePlace1”,“AppLabID”:3,“count”:15},{“LocalLabID”:“12BC”,“_ID”:“SomePlace2”,“AppLabID”:3,“count”:40}];
const result=combine(qrySearch,qrySearchLocID);
控制台日志(结果)代码>
尝试后,结果仅为qrySearch数组。在console.log输出上,qrySearchLocID数组甚至不显示在控制台上“尝试后,结果仅为qrySearch数组。在console.log输出上,qrySearchLocID数组甚至不显示在控制台上”您可以创建一个stacksnippets来演示问题吗?嗯,好的..我有一些结果显示了所需的输出,但是,有些人没有计数,即使_ID和sName匹配,那些没有连接的人也没有计数。此代码根据您的帖子生成所需的结果
var result = qrySearch.map((e, _) =>
(_ = qrySearchLocID.find((q) => q._ID=== e.sName)) ?
{ ...e, ...{ _ID: _._ID} } : e);