簡體   English   中英

將對象數組與嵌套對象數組進行比較,得到不匹配的對象數組

[英]Compare array of objects with nested array of objects and get unmatched array of objects

 const A = [ { campaignId: "3964126695264", portfolioData: { portfolioData: [ { asin: "B08FHG17ZH", sku: ["130511"], }, { asin: "B08FHF74TB", sku: ["130512"], }, { asin: "B08FHBWP89", sku: ["130513"], }, { asin: "B08FHFL6GD", sku: ["130514"], }, { asin: "B08FHDWTK2", sku: ["130515"], }, { asin: "B08FHFMW1V", sku: ["130516"], }, { asin: "B08FHF6V8B", sku: ["130517"], }, { asin: "B08FHFWDVM", sku: ["130518"], }, { asin: "B08FHFD18R", sku: ["130519"], }, { asin: "B08JKK4217", sku: ["130520"], }, { asin: "B08JKP82PB", sku: ["130521"], }, ], }, }, { campaignId: "137244687845173", portfolioData: { portfolioData: [ { asin: "B08FHG17ZH", sku: ["130511"], }, { asin: "B08FHF74TB", sku: ["130512"], }, { asin: "B08FHBWP89", sku: ["130513"], }, { asin: "B08FHFL6GD", sku: ["130514"], }, { asin: "B08FHDWTK2", sku: ["130515"], }, { asin: "B08FHFMW1V", sku: ["130516"], }, { asin: "B08FHF6V8B", sku: ["130517"], }, { asin: "B08FHFWDVM", sku: ["130518"], }, { asin: "B08FHFD18R", sku: ["130519"], }, { asin: "B08JKK4217", sku: ["130520"], }, { asin: "B08JKP82PB", sku: ["130521"], }, ], }, }, { campaignId: "182862063246935", portfolioData: { portfolioData: [ { asin: "B08FHG17ZH", sku: ["130511"], }, { asin: "B08FHF74TB", sku: ["130512"], }, { asin: "B08FHBWP89", sku: ["130513"], }, { asin: "B08FHFL6GD", sku: ["130514"], }, { asin: "B08FHDWTK2", sku: ["130515"], }, { asin: "B08FHFMW1V", sku: ["130516"], }, { asin: "B08FHF6V8B", sku: ["130517"], }, { asin: "B08FHFWDVM", sku: ["130518"], }, { asin: "B08FHFD18R", sku: ["130519"], }, { asin: "B08JKK4217", sku: ["130520"], }, { asin: "B08JKP82PB", sku: ["130521"], }, ], }, }, { campaignId: "262747542546680", portfolioData: { portfolioData: [ { asin: "B08FHG17ZH", sku: ["130511"], }, { asin: "B08FHF74TB", sku: ["130512"], }, { asin: "B08FHBWP89", sku: ["130513"], }, { asin: "B08FHFL6GD", sku: ["130514"], }, { asin: "B08FHDWTK2", sku: ["130515"], }, { asin: "B08FHFMW1V", sku: ["130516"], }, { asin: "B08FHF6V8B", sku: ["130517"], }, { asin: "B08FHFWDVM", sku: ["130518"], }, { asin: "B08FHFD18R", sku: ["130519"], }, { asin: "B08JKK4217", sku: ["130520"], }, { asin: "B08JKP82PB", sku: ["130521"], }, ], }, }, ]; const B = { ProductMetadataList: [ { asin: "B08FHG17ZH", sku: "130511" }, { asin: "B08FHF74TB", sku: "130512" }, { asin: "B08FHBWP89", sku: "130513" }, { asin: "B08FHFL6GD", sku: "130514" }, { asin: "B08FHDWTK2", sku: "130515" }, { asin: "B08FHFMW1V", sku: "130516" }, { asin: "B08FHF6V8B", sku: "130517" }, { asin: "B08FHFWDVM", sku: "130518" }, { asin: "B08FHFD18R", sku: "130519" }, { asin: "B08JKK4217", sku: "130520" }, { asin: "B08JKP82PB", sku: "130521" }, { asin: "B08JKP82PB", sku: "13052221" }, ], }; let difference = B.ProductMetadataList.filter((page1) => { const result = A.forEach((element) => { element.portfolioData.portfolioData.find((page2) => { if (page1.asin === page2.asin) { page2.sku.includes(page1.sku); } }); }); return;result; }). console,log("difference check "; difference);

無法實現上述結果,因為page1.asin === page2.asin不匹配你可以console.log(page1.asin === page2.asin)並理解差異,因為我無法解釋。

我正在努力實現:- 將 B 數組與 A 數組進行比較,並從數組 B 中獲取不匹配的對象。

面臨的困難:- 無法檢查數組 A 中是否存在該值 - 來自數組 B 的 sku 數組 - sku 值。

僅 2 行

  • 將 A 數組設為一級數組 - 將更容易找到匹配A.map(i => i.portfolioData.portfolioData).flat();

  • 過濾找到元素B.ProductMetadataList.filter(i =>.assinListA.find(j => i.asin === j.asin && j.sku.includes(i.sku)))

 const A = [ { campaignId: "3964126695264", portfolioData: { portfolioData: [ { asin: "B08FHG17ZH", sku: ["130511"], }, { asin: "B08FHF74TB", sku: ["130512"], }, { asin: "B08FHBWP89", sku: ["130513"], }, { asin: "B08FHFL6GD", sku: ["130514"], }, { asin: "B08FHDWTK2", sku: ["130515"], }, { asin: "B08FHFMW1V", sku: ["130516"], }, { asin: "B08FHF6V8B", sku: ["130517"], }, { asin: "B08FHFWDVM", sku: ["130518"], }, { asin: "B08FHFD18R", sku: ["130519"], }, { asin: "B08JKK4217", sku: ["130520"], }, { asin: "B08JKP82PB", sku: ["130521"], }, ], }, }, { campaignId: "137244687845173", portfolioData: { portfolioData: [ { asin: "B08FHG17ZH", sku: ["130511"], }, { asin: "B08FHF74TB", sku: ["130512"], }, { asin: "B08FHBWP89", sku: ["130513"], }, { asin: "B08FHFL6GD", sku: ["130514"], }, { asin: "B08FHDWTK2", sku: ["130515"], }, { asin: "B08FHFMW1V", sku: ["130516"], }, { asin: "B08FHF6V8B", sku: ["130517"], }, { asin: "B08FHFWDVM", sku: ["130518"], }, { asin: "B08FHFD18R", sku: ["130519"], }, { asin: "B08JKK4217", sku: ["130520"], }, { asin: "B08JKP82PB", sku: ["130521"], }, ], }, }, { campaignId: "182862063246935", portfolioData: { portfolioData: [ { asin: "B08FHG17ZH", sku: ["130511"], }, { asin: "B08FHF74TB", sku: ["130512"], }, { asin: "B08FHBWP89", sku: ["130513"], }, { asin: "B08FHFL6GD", sku: ["130514"], }, { asin: "B08FHDWTK2", sku: ["130515"], }, { asin: "B08FHFMW1V", sku: ["130516"], }, { asin: "B08FHF6V8B", sku: ["130517"], }, { asin: "B08FHFWDVM", sku: ["130518"], }, { asin: "B08FHFD18R", sku: ["130519"], }, { asin: "B08JKK4217", sku: ["130520"], }, { asin: "B08JKP82PB", sku: ["130521"], }, ], }, }, { campaignId: "262747542546680", portfolioData: { portfolioData: [ { asin: "B08FHG17ZH", sku: ["130511"], }, { asin: "B08FHF74TB", sku: ["130512"], }, { asin: "B08FHBWP89", sku: ["130513"], }, { asin: "B08FHFL6GD", sku: ["130514"], }, { asin: "B08FHDWTK2", sku: ["130515"], }, { asin: "B08FHFMW1V", sku: ["130516"], }, { asin: "B08FHF6V8B", sku: ["130517"], }, { asin: "B08FHFWDVM", sku: ["130518"], }, { asin: "B08FHFD18R", sku: ["130519"], }, { asin: "B08JKK4217", sku: ["130520"], }, { asin: "B08JKP82PB", sku: ["130521"], }, ], }, }, ]; const B = { ProductMetadataList: [ { asin: "B08FHG17ZH", sku: "130511" }, { asin: "B08FHF74TB", sku: "130512" }, { asin: "B08FHBWP89", sku: "130513" }, { asin: "B08FHFL6GD", sku: "130514" }, { asin: "B08FHDWTK2", sku: "130515" }, { asin: "B08FHFMW1V", sku: "130516" }, { asin: "B08FHF6V8B", sku: "130517" }, { asin: "B08FHFWDVM", sku: "130518" }, { asin: "B08FHFD18R", sku: "130519" }, { asin: "B08JKK4217", sku: "130520" }, { asin: "B08JKP82PB", sku: "130521" }, { asin: "B08JKP82PB", sku: "13052221" }, ], }; const assinListA = A.map(i => i.portfolioData.portfolioData).flat(); const res = B.ProductMetadataList.filter(i =>.assinListA.find(j => i.asin === j.asin && j.sku.includes(i.sku))) console.log(res)

一種簡單易讀的方法是注冊匹配數據array B的索引,然后根據這些索引進行過濾。

注意:我減少了 arrays 以使代碼更易於閱讀。 它將與您的數據一起使用。

 const A = [ { campaignId: "3964126695264", portfolioData: { portfolioData: [ { asin: "B08JKK4217", sku: ["130520"]}, { asin: "B08JKP82PB", sku: ["130521"]} ] } }, { campaignId: "137244687845173", portfolioData: { portfolioData: [ { asin: "B08JKK4217", sku: ["130520"]}, { asin: "B08JKP82PB", sku: ["130521"]} ] } } ] const B = { ProductMetadataList: [ { asin: "B08JKK4217", sku: "130520"}, { asin: "B08JKP82PB", sku: "130521"}, { asin: "B08JKP82PB", sku: "13052221"} ] } let indexes = [] // matching indexes of array B for(item of A){ let portfolioData = item['portfolioData']['portfolioData'] portfolioData.forEach((el_A) => { B.ProductMetadataList.forEach((el_B, i) => { // conditions let C1 = el_A.asin === el_B.asin let C2 = el_A['sku'].join() === el_B['sku'] let C3 =.indexes.includes(i) // save index if there is a match and the index has not been saved before if(C1 && C2 && C3) indexes.push(i) }) }) } let result = B.ProductMetadataList,filter((el.index) =>.indexes.includes(index)) console.log(result)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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