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

时间:2020-09-25 10:42:00

标签: javascript node.js arrays javascript-objects

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

[ { 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 } 
]

1 个答案:

答案 0 :(得分:1)

拥有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));

相关问题