我有一个对象数组,如果对象密钥电子邮件中的对象具有相同的属性,我想合并它们。重叠的属性需要添加到合并的对象中。使用新的对象键将是最好的。 这似乎有点复杂。
[ { 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 }
]
答案 0 :(得分: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));