I am parsing a complex object in Typescript, so have something like:
const a = reply['price']['value']['total']['value'];
and I like to ensure that all elements are defined in the chain, otherwise, it should set a=0 and do not trigger an exception if some of the chained keys are in fact undefined.
What would be the appropriate syntax for that?
If you're using modern JS you can use nullish coalescing and optional chaining
const a = reply?.['price']?.['value']?.['total']?.['value'] ?? 0;
Try to avoid using || instead of ??, because that will give you 0, if the final value is any falsy value, like 0 or false.
If you don't want to use nullish coalescing, you can do this, which achieves the same.
const a = reply?.['price']?.['value']?.['total']?.['value'] ? reply['price']['value']['total']['value'] : 0;
If you can't use @nullptr 's answer, I suggest creating a function for that purpose :
function getObjectNestedValue2(obj, keys, defaultValue) {
let currObjOrValue = obj;
keys.forEach(key => {
if (!currObjOrValue.hasOwnProperty(key)) {
currObjOrValue = defaultValue;
return;
}
currObjOrValue = currObjOrValue[key];
});
return currObjOrValue;
}
You then call it like so :
const a = getObjectNestedValue(reply, ['price', 'value', 'total', 'value'], 0);
Cheers