Issue
I have the following javascript object array:
[ { "firstName": "x", "lastName": "y", "age": 10},
{ "firstName": "x", "lastName": "y", "height": 100},
{ "firstName": "x", "lastName": "y", "weight": 50},
{ "firstName": "a", "lastName": "b", "age": 11},
{ "firstName": "a", "lastName": "b", "height": 110},
{ "firstName": "a", "lastName": "b", "weight": 60},
{ "firstName": "m", "lastName": "n", "age": 12},
{ "firstName": "m", "lastName": "n", "height": 120},
{ "firstName": "m", "lastName": "n", "weight": 70}]
Is it possible to group by firstName and lastName such that it includes other properties of the object in the array?
Expected Array:
[ { "firstName": "x", "lastName": "y", "age": 10, "height": 100, "weight": 50},
{ "firstName": "a", "lastName": "b", "age": 11, "height": 110, "weight": 60},
{ "firstName": "m", "lastName": "n", "age": 12, "height": 120, "weight": 70}]
Solution
Concept
Prepare a result array. Iterate through all the data. Check if the firstName
and lastName
exist in the result array. If no, push it into the result array. If yes, merge the object to get the missing properties.
Code
const data =[ { "firstName": "x", "lastName": "y", "age": 10},
{ "firstName": "x", "lastName": "y", "height": 100},
{ "firstName": "x", "lastName": "y", "weight": 50},
{ "firstName": "a", "lastName": "b", "age": 11},
{ "firstName": "a", "lastName": "b", "height": 110},
{ "firstName": "a", "lastName": "b", "weight": 60},
{ "firstName": "m", "lastName": "n", "age": 12},
{ "firstName": "m", "lastName": "n", "height": 120},
{ "firstName": "m", "lastName": "n", "weight": 70}];
let result = [];
let found;
data.forEach(d => {
found = false;
result.forEach(r => {
if (r.firstName === d.firstName && r.lastName === d.lastName){
Object.assign(r, d);
found = true;
}
});
if (!found){
result.push(d);
}
});
console.log(result);
Answered By - holydragon
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.