簡體   English   中英

如何根據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'
  },
]

提前致謝。

您可以使用mapfind功能。

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM