I want to merge two array of objects. Following are the two arrays:-
let listing=[
{name:'name1',age:14,email:'name1@gmail.com'},
{name:'name2',age:15,email:'name2@gmail.com'},
{name:'name3',age:13,email:'name3@gmail.com'},
{name:'name4',age:12,email:'name4@gmail.com'},
{name:'name5',age:15,email:'name5@gmail.com'},
{name:'name6',age:16,email:'name6@gmail.com'},
{name:'name7',age:12,email:'name7@gmail.com'},
{name:'name8',age:16,email:'name8@gmail.com'},
{name:'name2',age:15,email:'name2@gmail.com'},
{name:'name9',age:17,email:'name9@gmail.com'},
]
let info=[
{name:'name1',class:7,roll_no:4},
{name:'name3',class:6,roll_no:10},
{name:'name2',class:8,roll_no:2},
{name:'name5',class:8,roll_no:18},
{name:'name6',class:9,roll_no:23},
{name:'name7',class:5,roll_no:9},
{name:'name8',class:9,roll_no:13},
{name:'name2',class:8,roll_no:4},
{name:'name8',class:9,roll_no:13},
{name:'name2',class:8,roll_no:4},
]
Output should be in this form:-
let resultant_array=[
{name:'name1',age:14,email:'name1@gmail.com',class:7,roll_no:4},
{name:'name2',age:15,email:'name2@gmail.com',class:8,roll_no:2},
{name:'name3',age:13,email:'name3@gmail.com',class:6,roll_no:10},
{name:'name5',age:15,email:'name5@gmail.com',class:8,roll_no:18},
{name:'name6',age:16,email:'name6@gmail.com',class:9,roll_no:23},
{name:'name7',age:12,email:'name7@gmail.com',class:5,roll_no:9},
{name:'name8',age:16,email:'name8@gmail.com',class:9,roll_no:13},
{name:'name2',age:15,email:'name2@gmail.com',class:8,roll_no:4},
{name:'name8',age:16,email:'name8@gmail.com',class:9,roll_no:13},
{name:'name2',age:15,email:'name2@gmail.com',class:8,roll_no:4},
]
I want that all the objects specified in info array where name is same in both the objects should be included in new array and the objects should be inserted in the same format as listing array.
resultant_array=listing.map(x => Object.assign(x, info.find(y => y.name== x.name)));
displays only first match. If i use filter then all the matched objects are inserted in one element only.