向Javascript过滤器添加条件

向Javascript过滤器添加条件,javascript,Javascript,我想按姓名和/或姓氏筛选用户。但是我越来越害怕了 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 .toL

我想按姓名和/或姓氏筛选用户。但是我越来越害怕了

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

仅当用户具有lastname时,我如何检查lastname。我知道它们总是有名称

您可以使用JS自动布尔强制添加对变量存在性的检查:

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

您可以使用JS自动布尔强制添加对变量存在性的检查:

&& user.lastname   // This will return false if empty, null or undefined
&& user.lastname
    .toLowerCase()
    .includes(searchLastName.toLowerCase())
变量A:lastName仅在设置了lastName时进行检查:

users.filteruser=> 用户名 .toLowerCase .includesearchname.toLowerCase && !user.lastname ||user.lastname .toLowerCase .includesearchlastname.toLowerCase 变量B:必须设置lastName的附加条件:

users.filteruser=> 用户名 .toLowerCase .includesearchname.toLowerCase &&user.lastname &&user.lastname .toLowerCase .includesearchlastname.toLowerCase 变量A:lastName仅在设置了lastName时进行检查:

users.filteruser=> 用户名 .toLowerCase .includesearchname.toLowerCase && !user.lastname ||user.lastname .toLowerCase .includesearchlastname.toLowerCase 变量B:必须设置lastName的附加条件:

users.filteruser=> 用户名 .toLowerCase .includesearchname.toLowerCase &&user.lastname &&user.lastname .toLowerCase .includesearchlastname.toLowerCase
您想要A还是B取决于您的用例。这两个表达式都应该避免TypeError。&&和| |表达式将其操作数作为布尔值计算,因此user.lastName首先转换为布尔值true/false。正如Pac0所写的,空字符串、null或未定义的字符串被转换为false,但其他值也被转换为false,我将使用它可以正常工作的选项A!searchLastName | |。。。。谢谢您想要A还是B取决于您的用例。这两个表达式都应该避免TypeError。&&和| |表达式将其操作数作为布尔值计算,因此user.lastName首先转换为布尔值true/false。正如Pac0所写的,空字符串、null或未定义的字符串被转换为false,但其他值也被转换为false,我将使用它可以正常工作的选项A!searchLastName | |。。。。谢谢这回答了你的问题吗?这回答了你的问题吗?