Javascript中的嵌套过滤器

Javascript中的嵌套过滤器,javascript,reactjs,Javascript,Reactjs,我在javascript中有以下嵌套过滤器,但是从内部过滤器返回的用户并不能满足我想要的角色,所以我使用了不同的方法。这是我的 let admins = []; let customers = []; if(users.results){ users.results.filter(user => { user.roles.filter(role => { if(role.role.name === 'ADMIN'){

我在javascript中有以下嵌套过滤器,但是从内部过滤器返回的用户并不能满足我想要的角色,所以我使用了不同的方法。这是我的

  let admins = [];
  let customers = [];

  if(users.results){
    users.results.filter(user => {
      user.roles.filter(role => {
        if(role.role.name === 'ADMIN'){
          admins.push(user);
        }
      });
    });
    users.results.filter(user => {
      user.roles.filter(role => {
        if (role.role.name === 'CUSTOMER') {
          customers.push(user);
        }
      });
    });
  }
有效载荷的示例是

{
            "addresses": [],
            "created_at": "2020-04-18 14:21:55",
            "email": "deliverypersonnel4@mail.com",
            "first_name": "Lucas",
            "id": "5c7f9e0d-4727-416c-b0ce-61bc7542aee4",
            "image": null,
            "is_active": false,
            "is_verified": false,
            "last_name": "DeliveryPersonnel",
            "phone": "2547324738723",
            "roles": [
                {
                    "role": {
                        "description": "Can only access the online shop",
                        "name": "CUSTOMER"
                    }
                },
                {
                    "role": {
                        "description": "Can only access orders for delivery",
                        "name": "DELIVERY_PERSONNEL"
                    }
                }
            ],
            "updated_at": "2020-04-18 14:21:55"
        },
        {
        "addresses": [],
        "created_at": "2020-04-18 14:20:57",
        "email": "testadmin@mail.com",
        "first_name": "Admin",
        "id": "40f32c1e-5f53-41c7-8b78-e4918b05472d",
        "image": null,
        "is_active": false,
        "is_verified": false,
        "last_name": "Test",
        "phone": "254711123456",
        "roles": [
            {
                "role": {
                    "description": "Can create, view & update all records",
                    "name": "ADMIN"
                }
            },
            {
                "role": {
                    "description": "Can only access the online shop",
                    "name": "CUSTOMER"
                }
            }
        ],
        "updated_at": "2020-04-18 14:20:57"
    }

我怎样才能得到
testadmin@mail.com
管理员
客户
数组中,并具有
deliverypersonnel4@mail.com
客户
阵列中,不使用阵列推送方法。

尝试使用复杂条件筛选:

let customers = users.filter(user => {
  return user.roles.some(role => role.role.name === 'CUSTOMER')});
let admins = users.filter(user => {
  return user.roles.some(role => role.role.name === 'ADMIN')});

使用复杂条件尝试筛选:

let customers = users.filter(user => {
  return user.roles.some(role => role.role.name === 'CUSTOMER')});
let admins = users.filter(user => {
  return user.roles.some(role => role.role.name === 'ADMIN')});

我不知道你想要什么结果。但是如果您不想使用push方法,那么可以使用给定的方法

const admins = users.filter(({roles}) => roles.some(({role: {name}}) => name === 'ADMIN'));
const customers = users.filter(({roles}) => roles.some(({role: {name}}) => name === 'CUSTOMER'));

我不知道你想要什么结果。但是如果您不想使用push方法,那么可以使用给定的方法

const admins = users.filter(({roles}) => roles.some(({role: {name}}) => name === 'ADMIN'));
const customers = users.filter(({roles}) => roles.some(({role: {name}}) => name === 'CUSTOMER'));
不要对副作用使用
filter()
,这会让人困惑。不要对副作用使用
filter()
,这会让人困惑。