handsome
handsome

Reputation: 2402

add condition to Javascript filter

I want to filter users by name and or lastname. but I´m getting

TypeError: Cannot read property 'toLowerCase' of undefined


const users = [{name: 'john', lastname: "doe"}, {name: 'mary'}]

let searchName = "jo"
let searchLastName = ""

users.filter((user) =>
    user.name
        .toLowerCase()
        .includes(searchName.toLowerCase())

    && user.lastname
        .toLowerCase()
        .includes(searchLastName.toLowerCase())
)

how can I check for lastname only if user has lastname. (i know they always have name)

Upvotes: 1

Views: 62

Answers (2)

Sebastian B.
Sebastian B.

Reputation: 2191

Variant A: lastName check only if lastName is set:

users.filter((user) =>
    user.name
        .toLowerCase()
        .includes(searchName.toLowerCase())

    && (
        !user.lastname
        || user.lastname
            .toLowerCase()
            .includes(searchLastName.toLowerCase())
    )
)

Variant B: additional condition that lastName must be set:

users.filter((user) =>
    user.name
        .toLowerCase()
        .includes(searchName.toLowerCase())

    && user.lastname
    && user.lastname
        .toLowerCase()
        .includes(searchLastName.toLowerCase())
    )
)

Upvotes: 4

Pac0
Pac0

Reputation: 23149

You can add a check on the existence of the variable with JS automatic boolean coercion :

&& user.lastname   // This will return false if empty, null or undefined
&& user.lastname
    .toLowerCase()
    .includes(searchLastName.toLowerCase())

Upvotes: 3

Related Questions