为Javascript过滤器添加条件

问题描述 投票:1回答:1

我想用名字或姓来过滤用户,但我得到的是

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

我如何才能检查只有当用户有姓的时候才检查姓。(我知道他们总是有名字)

javascript
1个回答
4
投票

变体A。lastName 只检查是否 lastName 是设定的。

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

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

备选案文B:附加条件: lastName 必须设置。

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

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

3
投票

你可以用JS自动布林胁迫添加检查变量的存在。

&& user.lastname   // This will return false if empty, null or undefined
&& user.lastname
    .toLowerCase()
    .includes(searchLastName.toLowerCase())
© www.soinside.com 2019 - 2024. All rights reserved.