Issue
I have an array activeIds
of ids of services and there is another array servicesList
which contains objects of services.
Example: –
activeIds = [202, 204]
serviceList = [{
"id":201,
"title":"a"
},
{
"id":202,
"title":"a"
},
{
"id":203,
"title":"c"
},
{
"id":204,
"title":"d"
},
{
"id":205,
"title":"e"
}];
I want all the services(obj) whose ids are not a part of the first array i.e., activeIds
. From the above example code I want service obj of ids 201,203,205
Final output –
expectedArray = [{
"id":201,
"title":"a"
},
{
"id":203,
"title":"c"
},
{
"id":205,
"title":"e"
}];
Here is my attempt to code. But it is not correct at all. Please help-
const activeIds = e; // [202, 204]
const obj = [];
this.serviceList.map((s: IService) => {
activeIds.map((id: number) => {
if (id !== s.id) {
obj.push(s);
}
});
});
Solution
You can simply use array.filter
with indexOf
to check the matching element in the next array.
var arr = serviceList.filter(item => activeIds.indexOf(item.id) === -1);
DEMO
let activeIds = [202, 204]
let serviceList = [{
"id":201,
"title":"a"
},
{
"id":202,
"title":"a"
},
{
"id":203,
"title":"c"
},
{
"id":204,
"title":"d"
},
{
"id":205,
"title":"e"
}];
let arr = serviceList.filter(function(item){
return activeIds.indexOf(item.id) === -1;
});
console.log(arr);