How Can I use Filter() function of typescript to inspect inner property of JSON object

Viewed 29

How to get only those nodes whose sales property is true? Like in the below case I need only id:54 record because there is one department whose sales is true, while ID 56 does not have any department whose sales property is true so it should be neglected.

    {
    "id": 54,
    "firstName": "Data",
    "departmentAccess": [
        {
            "departmentId": 1118,
            "departmentName": "Hyundai - New Cars",
            "departmentCode": "HY - NEW",
            "sales": true,
            "trade": true
        },
        {
            "departmentId": 1119,
            "departmentName": "Jaguar & Land Rover - New Cars",
            "departmentCode": "Jag & LR",
            "sales": false,
            "trade": true
        }
    ]
},
{
    "id": 56,
    "firstName": "Peter",
    "departmentAccess": [
        {
            "departmentId": 1118,
            "departmentName": "Hyundai - New Cars",
            "departmentCode": "HY - NEW",
            "sales": false,
            "trade": false
        },
        {
            "departmentId": 1119,
            "departmentName": "Jaguar & Land Rover - New Cars",
            "departmentCode": "Jag & LR",
            "sales": false,
            "trade": false
        }
    ]
}
2 Answers

You need do use the .some function. So try this:

const object = [
    {
        "id": 54,
        "firstName": "Data",
        "departmentAccess": [
            {
                "departmentId": 1118,
                "departmentName": "Hyundai - New Cars",
                "departmentCode": "HY - NEW",
                "sales": true,
                "trade": true
            },
            {
                "departmentId": 1119,
                "departmentName": "Jaguar & Land Rover - New Cars",
                "departmentCode": "Jag & LR",
                "sales": false,
                "trade": true
            }
        ]
    },
    {
        "id": 56,
        "firstName": "Peter",
        "departmentAccess": [
            {
                "departmentId": 1118,
                "departmentName": "Hyundai - New Cars",
                "departmentCode": "HY - NEW",
                "sales": false,
                "trade": false
            },
            {
                "departmentId": 1119,
                "departmentName": "Jaguar & Land Rover - New Cars",
                "departmentCode": "Jag & LR",
                "sales": false,
                "trade": false
            }
        ]
    }
];

const filtered = object.filter(x => x.departmentAccess.some(y => y.sales));
console.log(filtered);

You can use .filter on the array storing the given objects and .some on the departmentAccess fields.

records.filter(r => r.departmentAccess.some(da => da.sales));
Related