繁体   English   中英

比较和 Array 到一个对象数组并返回匹配对象的一部分

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

我在下面有一组对象

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

所以示例 output 可以如下所示,这只是匹配对象的 ID

sampleOut= [337, 200]

这可以按如下方式完成:

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)

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

您可以使用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);

你可以做这样的事情。

 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)

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

 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM