I have an array of objects below
const response =
[
{
id: 105,
label: 'test',
directories: [ '/api/1/directories/500' ]
},
{
id: 337,
label: 'test2',
directories: [ '/api/1/directories/766' ]
},
{
id: 200,
label: 'test20',
directories: [ '/api/1/directories/95' ]
}
]
And I have an array called directories
directories = [ '/api/1/directories/766', '/api/1/directories/95' ]
I am trying to search/filter response to only return the ids of objects that matches the directories in directories array
so the sample output can be something like below, which is only the IDs of the matched objects
sampleOut= [337, 200]
This could be done as follows:
const out = response.filter(o => directories.includes(o.directories[0])).map(o => o.id);
Please have a look at the following runnable code snippet.
const response = [
{
id: 105,
label: 'test',
directories: [ '/api/1/directories/500' ]
},
{
id: 337,
label: 'test2',
directories: [ '/api/1/directories/766' ]
},
{
id: 200,
label: 'test20',
directories: [ '/api/1/directories/95' ]
}
];
const directories = [ '/api/1/directories/766', '/api/1/directories/95' ];
const out = response.filter(o => directories.includes(o.directories[0])).map(o => o.id);
console.log(out)
You can use reduce and check exist by indexOf as
const response =
[
{
id: 105,
label: 'test',
directories: [ '/api/1/directories/500' ]
},
{
id: 337,
label: 'test2',
directories: [ '/api/1/directories/766' ]
},
{
id: 200,
label: 'test20',
directories: [ '/api/1/directories/95' ]
}
]
directories = [ '/api/1/directories/766', '/api/1/directories/95' ];
var result = response.reduce((acc, item)=>{
if(directories.indexOf(item.directories[0]) > -1){
acc.push(item.id);
}
return acc;
},[]);
console.log(result);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With