I have some user and permission data that has been queried from my database. I would like the access object for each person to be conjoined with each user object so that when I map through the array in my app on a user permissions page, all the data is easily accessible.
Fortunately, my data that needs to be conjoined is in indexed order.
Question: How do I conjoin the access object with the user object based on Id.
My attempt:
const data = permissions.map((perm, pIndex) => {
return users.map((user, uIndex) => {
return pIndex === uIndex;
});
});My Data:
user = [{
firstName: "steve",
age: 22,
_id: "789"
},
{
fistName: "bill",
age: 18,
_id: "456"
},
{
firstName: "jeff",
age: 15,
_id: "123"
}
]
permissions = [{
userId: "789",
access: ["321", "654"]
},
{
userId: "456",
access: ["654"]
},
{
userId: "123",
access: ["321", "654", "987"]
},
]Desired output:
user = [{
firstName: "steve",
age: 22,
_id: "789",
access: ["321", "654"]
},
{
fistName: "bill",
age: 18,
_id: "456",
access: ["654"]
},
{
firstName: "jeff",
age: 15,
_id: "123",
access: ["321", "654", "987"]
}
]My current output has undefined values mixed in the array like:
[{obj}, undefined, undefined],
[undefined, {obj}, undefined],
[undefined, undefined, {obj}]thanks!
Advertisement
Answer
You can use .find to get the permission by userId:
const users = [
{ firstName: "steve", age: 22, _id: "789" },
{ fistName: "bill", age: 18, _id: "456" },
{ firstName: "jeff", age: 15, _id: "123" }
];
const permissions = [
{ userId: "789", access: ["321", "654"] },
{ userId: "456", access: ["654"] },
{ userId: "123", access: ["321", "654", "987"] },
];
const res = users.map(user => {
const { access = [] }
= permissions.find(permission => permission.userId===user._id) || {};
return {...user, access};
});
console.log(res);