猿问

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

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


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

]


梵蒂冈之花
浏览 133回答 1
1回答

隔江千里

拥有 , SearchResultOne,SearchResultTwo等是可能的,但比它的价值更难SearchResultThree,因此将它放入数组中更有意义: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));
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答