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",
},
]
}
]