簡體   English   中英

比較數組中的對象,合並具有相同屬性值的重復項,將屬性值添加到合並的對象中

[英]Compare objects in array, merge duplicates with same property value, add property values to the merged object

我有一個對象數組,如果它們在對象鍵電子郵件中具有相同的屬性,我想合並對象。 重疊屬性需要添加到合並對象中。 最好使用新的對象鍵。 這似乎有點復雜。

[ { email: 'one@xyz.de',
    SearchQuery: 'Abts, Tomma',
    SearchResult: 1 },
  { email: 'one@xyz.de',
    SearchQuery: 'Ernst, Max',
    SearchResult: 3},
  { email: 'one@xyz.de',
    SearchQuery: 'Sigmund Abeles ',
    SearchResult: 1 },
  { email: 'two@xyz.de',
    SearchQuery: 'Barlach',
    SearchResult: 4 } ]

結果應該是這樣的

[ { email: 'one@xyz.de',
    SearchQuery: 'Abts, Tomma',
    SearchResult: 1 
    SearchQueryTwo: 'Ernst, Max',
    SearchResultTwo: 3
    SearchQueryThree: 'Sigmund, Abeles ',
    SearchResultThree: 1 },
    { email: 'two@xyz.de',
    SearchQuery: 'Barlach',
    SearchResult: 4 } 
]

擁有SearchResultOneSearchResultTwoSearchResultThree等是可能的,但比它的價值更難,因此將其放入數組更有意義:

 const inp = [ { email: 'one@xyz.de', SearchQuery: 'Abts, Tomma', SearchResult: 1 }, { email: 'one@xyz.de', SearchQuery: 'Ernst, Max', SearchResult: 3}, { email: 'one@xyz.de', SearchQuery: 'Sigmund Abeles ', SearchResult: 1 }, { email: 'two@xyz.de', SearchQuery: 'Barlach', SearchResult: 4 } ]; const oup = inp.reduce((acc, o) => { const queryResult = acc.find(qr => qr.email == o.email); if(queryResult) { queryResult.results.push({SearchResult:o.SearchResult, SearchQuery: o.SearchQuery}) } else { let newQR = {email: o.email, results: [{SearchResult:o.SearchResult, SearchQuery: o.SearchQuery}]}; acc.push(newQR); } return acc; }, []); console.log(JSON.stringify(oup));

暫無
暫無

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

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