简体   繁体   English

合并javascript对象数组

[英]Merge array of javascript objects

This is the array of javascript objects.这是 javascript 对象的数组。 I want these javascript objects will merge into a single javascript object according to their same property value.我希望这些 javascript 对象根据它们的相同属性值合并为一个 javascript 对象。

This is the original array:这是原始数组:

const array = [
 {email: 'jon@endtest-mail.io', name: 'Jon', role: 'Player', Education: {…}},
 {email: 'jon@endtest-mail.io', name: 'Jon', role: 'Player', Skills: {…}},
 {email: 'jon@endtest-mail.io', name: 'Jon', role: 'Player', Total: {…}},
 {email: 'jon@endtest-mail.io', name: 'Jon', role: 'Player', Personal: {…}},
 {email: 'tayyab@endtest-mail.io', name: 'Tayyab', role: 'Lead', Ethics: {…}},
 {email: 'tayyab@endtest-mail.io', name: 'Tayyab', role: 'Lead', Total: {…}},
 {email: 'arya@endtest-mail.io', name: 'Arya', role: 'Banker', Total: {…}},
 {email: 'arya@endtest-mail.io', name: 'Arya', role: 'Banker', Skills: {…}},
 {email: 'arya@endtest-mail.io', name: 'Arya', role: 'Banker', Personal: {…}},
 {email: 'arya@endtest-mail.io', name: 'Arya', role: 'Banker', Education: {…}},
]

This is the required array:这是所需的数组:

const array = [
 {email: 'jon@endtest-mail.io', name: 'Jon', role: 'Player', Education: {…}, Skills: {…}, Total: {…}, Personal: {…}},
 {email: 'tayyab@endtest-mail.io', name: 'Tayyab', role: 'Lead', Ethics: {…}, Total: {…}},
 {email: 'arya@endtest-mail.io', name: 'Arya', role: 'Banker', Total: {…}, Skills: {…}, Personal: {…}, Education: {…}},
]

Like email, name, and role all three have the same property and property value.与电子邮件、姓名和角色一样,这三者都具有相同的属性和属性值。 It would merge into one javascript object and the others remain the same.它将合并到一个 javascript 对象中,而其他对象保持不变。 Kindly provide the solution in React.js/Javascript .请在React.js/Javascript中提供解决方案。 Thanks谢谢

A good case to apply reduce method, try this code:一个应用 reduce 方法的好案例,试试这个代码:

 const array = [ {email: 'jon@endtest-mail.io', name: 'Jon', role: 'Player', Education: {}}, {email: 'jon@endtest-mail.io', name: 'Jon', role: 'Player', Skills: {}}, {email: 'jon@endtest-mail.io', name: 'Jon', role: 'Player', Total: {}}, {email: 'jon@endtest-mail.io', name: 'Jon', role: 'Player', Personal: {}}, {email: 'tayyab@endtest-mail.io', name: 'Tayyab', role: 'Lead', Ethics: {}}, {email: 'tayyab@endtest-mail.io', name: 'Tayyab', role: 'Lead', Total: {}}, {email: 'arya@endtest-mail.io', name: 'Arya', role: 'Banker', Total: {}}, {email: 'arya@endtest-mail.io', name: 'Arya', role: 'Banker', Skills: {}}, {email: 'arya@endtest-mail.io', name: 'Arya', role: 'Banker', Personal: {}}, {email: 'arya@endtest-mail.io', name: 'Arya', role: 'Banker', Education: {}}, ] let result = Object.values(array.reduce((acc, {name, ...rest}) => { acc[name] = {...acc[name], ...{name, ...rest}}; return acc; }, {})); console.log(result);

Using reduce and Object.values使用 reduce 和 Object.values

 const array = [ {email: 'jon@endtest-mail.io', name: 'Jon', role: 'Player', Education: {}}, {email: 'jon@endtest-mail.io', name: 'Jon', role: 'Player', Skills: {}}, {email: 'jon@endtest-mail.io', name: 'Jon', role: 'Player', Total: {}}, {email: 'jon@endtest-mail.io', name: 'Jon', role: 'Player', Personal: {}}, {email: 'tayyab.ejaz@endtest-mail.io', name: 'Tayyab', role: 'Lead', Ethics: {}}, {email: 'tayyab.ejaz@endtest-mail.io', name: 'Tayyab', role: 'Lead', Total: {}}, {email: 'arya@endtest-mail.io', name: 'Arya', role: 'Banker', Total: {}}, {email: 'arya@endtest-mail.io', name: 'Arya', role: 'Banker', Skills: {}}, {email: 'arya@endtest-mail.io', name: 'Arya', role: 'Banker', Personal: {}}, {email: 'arya@endtest-mail.io', name: 'Arya', role: 'Banker', Education: {}}, ] const result = Object.values(array.reduce((acc, item) => { // build key with unique props const key = [item.email, item.name, item.role].join("-"); // assign properties to a new object // if object does not exist with the key it uses empty object acc[key] = {...(acc[key] || {}), ...item}; return acc; }, {})); console.log(result);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM