向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 | |。。。。谢谢这回答了你的问题吗?这回答了你的问题吗?