javascript - 按值数组过滤对象数组中的嵌套数组

标签 javascript arrays object filter lodash

考虑下面的对象数组:

[
    {
        "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#everyArray#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/

相关文章:

临时对象的 C++ 调用函数

javascript - 如何将 div 调整为客户端视口(viewport)高度?

javascript - 如何检查Javascript全局对象是否被篡改?

javascript - 如何根据 null 键值操作 JavaScript 数组对象数据

Java数组相加算法

Java 类/对象转换何时适用

c++ - iostream 不打印到第二个源类中的终端 (c++)

javascript - 在 MySQL 中用 javascript 格式化日期时遇到问题

Javascript:在js文件中包含大列表

javascript - Uncaught TypeError : . unshift 不是函数