Reputation: 2402
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
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
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