考虑下面的对象数组:
[
{
"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",
}
]
},
{...}
]
我正在尝试过滤对象数组,比较嵌套
courses
中的 ID数组在下面的数组中:filter.courses = [1,3]
以下行适用于数组中的第 n 个值:(通过 https://stackoverflow.com/a/41347441/9766768 )
let fil = filter(this.results, { courses: [{ id: this.filter.courses[n] }]});
但是,我希望实现这一点(下面的伪代码):
let fil = filter(this.results, { courses: [{ id: this.filter.courses }]});
预期的输出将是一个包含任何类(class) ID 元素的对象数组,在这种情况下:
[
{
"guid": "j5Dc9Z",
"courses": [
{
"id": 1,
"name": "foo",
}
]
},
{
"guid": "a5gdfS",
"courses": [
{
"id": 2,
"name": "bar",
},
{
"id": 3,
"name": "foo",
},
]
}
]
在这种情况下,什么被认为是最好的解决方案?避免循环将是一个奖励。
最佳答案
如果您尝试过滤类(class) ID 包含在 filter.courses
中的元素,您可以使用 Array#every
和 Array#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"}]}];
const courses = [1, 6, 3];
const r = data.filter(d => d.courses.every(c => courses.includes(c.id)));
console.log(r);
关于javascript - 按值数组过滤对象数组中的嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51650390/