Javascript 按值数组筛选对象数组中的嵌套数组

Javascript 按值数组筛选对象数组中的嵌套数组,javascript,arrays,object,filter,lodash,Javascript,Arrays,Object,Filter,Lodash,考虑以下对象数组: [ { "guid": "j5Dc9Z", "courses": [ { "id": 1, "name": "foo", } ] }, { "guid": "a5gdfS", "courses": [

考虑以下对象数组:

[
    {
        "guid": "j5Dc9Z",            
        "courses": [
            {
                "id": 1,
                "name": "foo",                    
            }
        ]
    },
    {
        "guid": "a5gdfS",
        "courses": [
            {
                "id": 2,
                "name": "bar",                    
            },
            {
                "id": 3,
                "name": "foo",                    
            },    
        ]
     },
     {
        "guid": "jHab6i",
        "courses": [
            {
                "id": 4,
                "name": "foobar",                    
            }   
        ]
     },  
     {...}    
]
我正在尝试筛选对象数组,将嵌套的
课程
数组中的ID与以下数组中的ID进行比较:

filter.courses = [1,3]
以下行适用于数组中的第n个值:(via)

但是,我希望实现这一点(下面是伪代码):

预期输出将是包含任何课程ID元素的对象数组,在本例中:

[
    {
        "guid": "j5Dc9Z",            
        "courses": [
            {
                "id": 1,
                "name": "foo",                    
            }
        ]
    },
    {
        "guid": "a5gdfS",
        "courses": [
            {
                "id": 2,
                "name": "bar",                    
            },
            {
                "id": 3,
                "name": "foo",                    
            },    
        ]
     }   
]

在这种情况下,什么是最佳解决方案?避免循环将是一个额外的好处。

如果您试图筛选其课程ID包含在
过滤器中的元素。课程
,您可以使用
数组#every
数组#includes

const data=[{“guid”:“j5Dc9Z”,“courses”:[{“id”:3,“name”:“foo”},{“guid”:“a5gdfS”,“courses”:[{“id”:1,“name”:“bar”},{“id”:3,“name”:“foo”},{“guid”:“jHab6i”,“courses”:[{“id”:7,“name”:“foobar”}];
常量课程=[1,6,3];
constr=data.filter(d=>d.courses.every(c=>courses.includes(c.id));
控制台日志(r)试试这个

结果=[
{
“guid”:“j5Dc9Z”,
“课程”:[
{
“id”:3,
“名称”:“foo”,
}
]
},
{
“guid”:“a5gdfS”,
“课程”:[
{
“id”:1,
“名称”:“酒吧”,
},
{
“id”:3,
“名称”:“foo”,
},    
]
} 
]
变量过滤器=[1]
console.log(results.map)(result=>{
result.courses=result.courses.filter(课程=>(filter.includes(课程id)))
返回结果
}))
let fil = filter(this.results, { courses: [{ id: this.filter.courses }]});
[
    {
        "guid": "j5Dc9Z",            
        "courses": [
            {
                "id": 1,
                "name": "foo",                    
            }
        ]
    },
    {
        "guid": "a5gdfS",
        "courses": [
            {
                "id": 2,
                "name": "bar",                    
            },
            {
                "id": 3,
                "name": "foo",                    
            },    
        ]
     }   
]