比较数组中的对象,合并具有相同属性值的重复项,将属性值添加到合并的对象

问题描述

我有一个对象数组,如果对象密钥电子邮件中的对象具有相同的属性,我想合并它们。重叠的属性需要添加到合并的对象中。使用新的对象键将是最好的。 这似乎有点复杂。

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

结果应该类似于

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

解决方法

拥有SearchResultOneSearchResultTwoSearchResultThree等是可能的,但比其价值更困难,因此将其放入数组更有意义:

const inp = [ { email: 'one@xyz.de',SearchQuery: 'Abts,Tomma',SearchResult: 1 },{ email: 'one@xyz.de',SearchQuery: 'Ernst,Max',SearchResult: 3},SearchQuery: 'Sigmund Abeles ',{ 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));