I am trying to compare a value within a JSON object with a variable:
if (resp.userdetails.name == username) {
// do something
}
The problem is that not all resp
objects have userdetails
, so I get this error message sometimes:
Cannot read properties of undefined (reading 'name')
I have tried to use ?
to say it might be optional (or not exist):
if (resp.userdetails?.name == username)
But I get an Unexpected token
error in that case.
Can someone please tell me how I can update my if statement to say userdetails
may not always be in the response, but if it is, then check name
is equal to username
?
Either:
if (resp.userdetails && resp.userdetails.name == username)
If you installed lodash into your project, then you can use
_.get(resp,"userdetails.name")
as documented.
If you haven't installed lodash, then I strongly suggest you install from npm because lodash is the best and the most widely used utility package.
Lodash is a popular javascript based library which provides 200+ functions to facilitate web development. It provides helper functions like map, filter, invoke as well as function binding, javascript templating, deep equality checks, creating indexes and so on. Lodash can be used directly inside a browser and also with Node.js.
Working with objects using JavaScript can be quite challenging, specifically if you have lots of manipulation to be done with them. Lodash comes with lots of features that eases your work with objects.
Lodash is an open source project and you can easily contribute to the library and add features in the form of plugins and make it available on GitHub and in Node.js.
Syntax
_.get(object, path, [defaultValue]) Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
Arguments
object (Object) − The object to query.
path (Array|string) − The path of the property to get.
[defaultValue] (*) − The value returned for undefined resolved values.
If you installed lodash into your project, then you can use
_.get(resp,"userdetails.name")
as documented.
If you haven't installed lodash, then I strongly suggest you install from npm because lodash is the best and the most widely used utility package.
command to install Lodash
npm install loadash
var _ = require("lodash");
var data = [
{ userdetails: { name: "d" } },
{},
{ userdetails: {} },
{ userdetails: { name: "d" } },
];
for (i = 0; i < data.length; i++) {
var resp = data[i];
if (_.get(resp, "userdetails.name") == "d") {
// if (resp.userdetails && resp.userdetails.name == "d") { use without loadlash
console.log("Success");
} else {
console.log("failed");
}
}
Here loadash is super complex. But you can use this to avoid runtime errors. Below both expressions get the same result
resp.userdetails && resp.userdetails.name == "d"
===
_.get(resp, "userdetails.name") == "d"