I have
obj1= [{keyID: 'c71cc89335565241f59ac9bb9da162a3ddf4a6b483bdc06dd82b9275898ba5ee', name: '[email protected]'},
{keyID: '34051d2554ab20b0d24c2c39946d96da7e07508e7a8546bc2df299601dcbff05', name: '[email protected]'}]
And
obj2=[{id: 19, email: '[email protected]', other_field: false},
{id: 221, email: '[email protected]', other_field: false},
{id: 13, email: '[email protected]', other_field: false)},
{id: 2, email: '[email protected]', other_field: true]
As you can see I have for obj1 keyID
that is diffenret from obj2 ID
and that is fine. The thing that I want to group them by is name(obj1) and email(obj2)
the field with the same email should create a new object with the same structure obj2 with a new field "isPresent
"
result=[{id: 19, email: '[email protected]', other_field: false,isPresent=false},
{id: 221, email: '[email protected]', other_field: false,isPresent=false},
{id: 13, email: '[email protected]', other_field: false,isPresent=true)},
{id: 2, email: '[email protected]', other_field: true,isPresent=true]
How can I achieve that?
CodePudding user response:
You can map over obj2
and check if an element with the same name exists in obj1
via some.
I also spread the obj
inside the map instead of assigning isPresent
directly to avoid side effects.
const obj1 = [{ keyID: 'c71cc89335565241f59ac9bb9da162a3ddf4a6b483bdc06dd82b9275898ba5ee', name: '[email protected]' }, { keyID: '34051d2554ab20b0d24c2c39946d96da7e07508e7a8546bc2df299601dcbff05', name: '[email protected]' }];
const obj2 = [{ id: 19, email: '[email protected]', other_field: false }, { id: 221, email: '[email protected]', other_field: false }, { id: 13, email: '[email protected]', other_field: false }, { id: 2, email: '[email protected]', other_field: true }];
const result = obj2.map((obj) => ({
...obj,
isPresent: obj1.some(({ name }) => name === obj.email),
}));
console.log(result);
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>