Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将和数组与对象数组进行比较并返回匹配对象的一部分_Javascript - Fatal编程技术网

Javascript 将和数组与对象数组进行比较并返回匹配对象的一部分

Javascript 将和数组与对象数组进行比较并返回匹配对象的一部分,javascript,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', directo

下面是一组对象

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]

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

const响应=
[
{
id:105,
标签:“测试”,
目录:['/api/1/directories/500']
},
{
身份证号码:337,
标签:“test2”,
目录:['/api/1/directories/766']
},
{
id:200,
标签:“test20”,
目录:['/api/1/directories/95']
}
]
var directories=['/api/1/directories/766','/api/1/directories/95']
var sampleOut=[]
响应.forEach(函数(a){
if(directories.indexOf(a.directories[0])>=0){
抽样。推送(a.id)
}
})

console.log(sampleOut)
这可以按如下方式完成:

const out = response.filter(o => directories.includes(o.directories[0])).map(o => o.id);
请看一下下面的可运行代码段

const响应=[
{
id:105,
标签:“测试”,
目录:['/api/1/directories/500']
},
{
身份证号码:337,
标签:“test2”,
目录:['/api/1/directories/766']
},
{
id:200,
标签:“test20”,
目录:['/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)
您可以使用
reduce
并通过
indexOf
as检查存在

const响应=
[
{
id:105,
标签:“测试”,
目录:['/api/1/directories/500']
},
{
身份证号码:337,
标签:“test2”,
目录:['/api/1/directories/766']
},
{
id:200,
标签:“test20”,
目录:['/api/1/directories/95']
}
]
目录=['/api/1/directories/766','/api/1/directories/95'];
var结果=响应。减少((acc,项目)=>{
if(directories.indexOf(item.directories[0])>-1){
附件推送(项目id);
}
返回acc;
},[]);

控制台日志(结果)您可以这样做

const响应=
[
{
id:105,
标签:“测试”,
目录:['/api/1/directories/500']
},
{
身份证号码:337,
标签:“test2”,
目录:['/api/1/directories/766']
},
{
id:200,
标签:“test20”,
目录:['/api/1/directories/95']
}
];
const directories=['/api/1/directories/766','/api/1/directories/95'];
const res=响应。reduce((acc,elem)=>{
if(目录包括(元素目录[0])){
附件推送(元件id)
}
返回acc
},[]);

console.log(res)
这是否回答了您的问题?我正在获取未经处理的PromisejectionWarning:TypeError:无法读取数组中未定义的属性“0”。reduce()不要紧,它工作了。在填充数组后,数组首先声明为空。我获取了正确的数据
const out = response.filter(o => directories.includes(o.directories[0])).map(o => o.id);