So I have 2 arrays here, let say
const users = [{_id:ObjectId("6274fb5b82bcc9b2ccc0a361"), name:p1, age:10},
{_id:ObjectId("6274fbc382bcc9b2ccc0a362"), name:p2, age:15},
{_id:ObjectId("6277a3d5b66c061096222bbd")}, name:p3, age:20];
const filterArray = [ObjectId("6274fbc382bcc9b2ccc0a362"),ObjectId("6277a3d5b66c061096222bbd")];
I want to filter result based on matching ObjectId, here's what I'm trying to do
const filteredUsers = users.filter(user=> !!filterArray.includes(user._id));
I'm expecting this result
filteredUsers = [{_id:ObjectId("6274fbc382bcc9b2ccc0a362"), name:p2, age:15},
{_id:ObjectId("6277a3d5b66c061096222bbd")}, name:p3, age:20]
CodePudding user response:
You must convert it to string then filter it:
const users = [
{ _id: ObjectId('6274fb5b82bcc9b2ccc0a361'), name: 'p1', age: 10 },
{ _id: ObjectId('6274fbc382bcc9b2ccc0a362'), name: 'p2', age: 15 },
{ _id: ObjectId('6277a3d5b66c061096222bbd'), name: 'p3', age: 20 }
]
const filterArray = [
ObjectId('6274fbc382bcc9b2ccc0a362'),
ObjectId('6277a3d5b66c061096222bbd')
]
const stringFilterArray = filterArray.map(item => item.toString())
const filteredUsers = users.filter(user => stringFilterArray.includes(user._id.toString()))
/* result
[
{ _id:ObjectId("6274fbc382bcc9b2ccc0a362"), name:p2, age:15 },
{ _id:ObjectId("6277a3d5b66c061096222bbd"), name:p3, age:20 }
]
*/
CodePudding user response:
Try to map
the filterArray
to an array of String
s and use that for comparison:
const filterArray = [ObjectId("6274fbc382bcc9b2ccc0a362"),ObjectId("6277a3d5b66c061096222bbd")];
const mappedFilterArray = filterArray.map(id => id.toString());
const filteredUsers = users.filter(user=> !!mappedFilterArray.includes(user._id.toString()));