比较并数组化为对象数组,然后返回匹配对象的一部分

时间:2020-06-07 04:27:31

标签: javascript

我下面有一个对象数组

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' ]

我正在尝试搜索/过滤响应,以仅返回与目录数组中的目录匹配的对象的ID

因此示例输出可能类似于以下内容,仅是匹配对象的ID

sampleOut= [337, 200]

5 个答案:

答案 0 :(得分:3)

这可以按照以下步骤进行:

const out = response.filter(o => directories.includes(o.directories[0])).map(o => o.id);

请查看以下可运行的代码段。

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)

答案 1 :(得分:2)

const sampleOut = response.filter(response => directories.includes(response.directories[0]))
    .map(response => response.id);

答案 2 :(得分:2)

您可以使用reduce并通过indexOf确认存在

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);

答案 3 :(得分:2)

您可以这样做。

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 res = response.reduce((acc, elem)=>{
  if(directories.includes(elem.directories[0])){
    acc.push(elem.id)
  }
  return acc
},[]);

console.log(res)

答案 4 :(得分:1)

如果存在匹配项,则可以遍历主数组并推送所需的属性:

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' ]
  }
]

var directories = [ '/api/1/directories/766', '/api/1/directories/95' ]

var sampleOut = []

response.forEach(function(a) {
  if (directories.indexOf(a.directories[0]) >= 0 ) {
    sampleOut.push(a.id)
  }
})

console.log(sampleOut)