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