I have a large json object. I need to access x = a.b.c.d.e.f.g
. However b
(or c
, d
, e
...) can be undefined. This data structure is being imported from somewhere else.
Is there a way to try to get to assign x
with null
or undefined
without throwing an error?
Optional chaining is now part of the ECMAScript spec and can be used on most javascript clients (browsers, node.js, etc)
x = a.b?.c?.d?.e?.f?.g
To use a default value if the access fails you can use the Nullish coalescing operator (??)
x = a.b?.c?.d?.e?.f?.g ?? 'my default value'
The easiest way is to use try catch
try {
x = a.b.c.d.e.f.g
} catch(e) {
x = undefined;
}
There is a proposal for this called optional chaining
you can check it here: https://github.com/tc39/proposal-optional-chaining
x = a.b?.c?.d?.e?.f?.g
If you are using a transpiler you'll be able to use it, however its still in the very early stages and might not be accepted to be supported in the spec
There are some proposals to solve this ( syntactic sugar missing) problem. Hopefully somewhen we may do this:
let x = a?.b?.c?.d?.e;
However, until then we need to fall back to objects if the variable is undefined:
var x =( ( ( ( (a || {}).b || {} ) || {} ).c || {} ).d || {}).e;
I admit that this is quite ugly. Maybe object destructuring is more beautiful:
let ({
b: {
c: {
d: { e:x } = {}
} = {}
} = {}
}) = a;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With