Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Compare and Array to an array of objects and return a part of the matched objects

Tags:

javascript

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]
like image 945
AbdA Avatar asked Feb 03 '26 21:02

AbdA


2 Answers

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)
like image 79
uminder Avatar answered Feb 05 '26 12:02

uminder


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);
like image 40
Hien Nguyen Avatar answered Feb 05 '26 12:02

Hien Nguyen