简体   繁体   中英

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)

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())
    )
)

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())

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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