繁体   English   中英

如何使用jmesPath过滤具有数组的表达式的javascript对象?

[英]How can I filter javascript objects with an expression that has array in it with jmesPath?

我有一组用户,每个用户都有几个角色。 数组的示例如下所示。

[
    {
        id: 1,
        username: 'john',
        roles: [
            {id: 500, name: 'Admin'},
            {id: 501, name: 'Owner'}
        ]
    },
    {
        id: 2,
        username: 'joe',
        roles: [
            {id: 500, name: 'Admin'},
        ]
    },
    {
        id: 3,
        username: 'june',
        roles: [
            {id: 502, name: 'User'},
        ]
    }
]

我正在尝试使用jmesPath来获得具有管理员角色的所有用户。 我已经尝试过[?roles[].name=='Admin']但这给出的是null值。 可以使用jmesPath做到这一点,如果可以,您可以给我这个示例的表达式吗?

我在这个例子和您的数据上做了一些尝试

http://jmespath.org/examples.html#filtering-and-selecting-nested-data

我用这个表达使它起作用

[?roles[?name=='Admin']]

您可以使用以下普通JavaScript获得相同的结果:

假设您的数组存储在var users = [...]上。

users.filter((i)=> i.roles.some((s) => s.name === "Admin"))

您可以使用jsBin看到此示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM