[英]How do group elements in an array of objects of different sizes by comparing two different unique properties? in javascript
[英]How to combine two array of objects of different sizes, based on a property in Javascript?
我有两个长度不同但共享相似信息的对象数组。
qrySearchLocID = [{
LocalLabID: '123f',
SystemID: 5000152,
AppLabID: 3
},
{
LocalLabID: '12BC',
SystemID: 5000384,
AppLabID: 3
},
];
和
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
},
]
我想根据 SystemID 组合这两个数组,从 qrySearch 复制所有信息并从 qrySearchLocID 添加 LocalLabID,仅此而已。 例如我希望结果数组是
[{
sName: 'SomePlace1',
lBusinessID: 37343,
SystemID: 5000152,
LocalLabID: '123f'
},
{
sName: 'SomePlace2',
lBusinessID: 39780,
SystemID: 5000156
},
{
sName: 'SomePlace3',
lBusinessID: 50772,
SystemID: 5000519
},
{
sName: 'SomePlace4',
lBusinessID: 31079,
SystemID: 5000384,
LocalLabID: '12BC'
},
]
提前致谢。
您可以使用map
和find
功能。
var qrySearchLocID = [{ LocalLabID: '123f', SystemID: 5000152, AppLabID: 3 }, { LocalLabID: '12BC', SystemID: 5000384, AppLabID: 3 }, ]; var 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 }, ]; var result = qrySearch.map((e, _) => (_ = qrySearchLocID.find((q) => q.SystemID === e.SystemID)) ? { ...e, ...{ LocalLabID: _.LocalLabID } } : e); console.log(result);
我的建议是将两者都转换为中间形式,即 SystemID 键控的对象文字。 然后您可以将所有属性添加到该对象,然后转换回您需要长期使用的任何形式。
您可以使用Array.findIndex
函数在满足特定条件的数组中查找索引,然后将信息添加到该索引处的对象:
qrySearchLocID = [{ LocalLabID: '123f', SystemID: 5000152, AppLabID: 3 }, { LocalLabID: '12BC', SystemID: 5000384, AppLabID: 3 }, ]; 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 }, ] for(var i = 0; i < qrySearch.length; i++){ var j = qrySearchLocID.findIndex(function(elem){ return elem.SystemID == qrySearch[i].SystemID; }); if(j != -1){ qrySearch[i].LocalLabID = qrySearchLocID[j].LocalLabID; } } console.log(qrySearch)
为了加快查找速度,您可以先将第一个数组转换为以 SystemID 为键的 Map。 然后在第二个数组的map
使用它,在map
查找 SystemID 并获取它的 LocalLabID(如果存在)。
在这里,您可以看到在一个函数表达式中发生的所有事情:
const qrySearchLocID = [ { LocalLabID: '123f', SystemID: 5000152, AppLabID: 3 },{ LocalLabID: '12BC', SystemID: 5000384, AppLabID: 3 }], 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 result = qrySearch.map( (map => o => Object.assign(o, map.has(o.SystemID) && { LocalLabID: map.get(o.SystemID) })) (new Map(qrySearchLocID.map(loc => [loc.SystemID, loc.LocalLabID]))) ); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.