首页 > 解决方案 > 过滤嵌套对象

问题描述

我正在尝试根据角色数组中的特定角色类型过滤列表,角色数组是一个对象数组。

下面是我的json

this.rolesData =  [{
         "firstName": "Francis",
         "lastName": "Underwood",
         "middleName": "",
         "title": { "titleId": "1", "titleName": "AA" },
         "roles": [
             {"roleGuid" : 1,  "roleType" : 1 },  
             { "roleGuid" : 2,  "roleType" : 3 }
        ]
    },
    {
        "firstName": "Claire",
        "lastName": "Underwood",
        "middleName": "",
        "title": { "titleId": "2", "titleName": "BB" },
        "roles": [
            {"roleGuid" : 1,  "roleType" : 2 },  
            { "roleGuid" : 2,  "roleType" : 3 }, 
            { "roleGuid" : 3, "roleType" : 4 }
        ]
    }
];

我正在尝试获取其中包含 roleType 1 的项目。所以对于我的示例,它应该只返回第一个对象,因为只有第一个对象在其角色列表中具有 roleType 1。

我在下面尝试过,但没有用

this.rolesData.filter(data => {
    data.roles.filter(role => {
        if (role.roleType == 1) {
          return role;
        }
    });
});

标签: javascriptecmascript-6

解决方案


.filter应该采用将返回true或返回false给定项目的函数。

const results = this.rolesData.filter(data => {
    // Filter to matching roles
    const matchingRoles = data.roles.filter(role => {
        return role.roleType == 1;
    });
    // Return true if matching roles are found
    return matchingRoles && matchingRoles.length > 0;
});

推荐阅读