JavaScript

JavaScript

Using Optional Chaining for checking for existence of nested Object key

Anjanesh Lekshminarayanan's photo
Anjanesh Lekshminarayanan
·Sep 7, 2022·

1 min read

In PHP we can do use isset() for checking the existence of a deeply nested array's key since the beginning of time :

<?php
$p1 = "a9bedbd81019b877";
$p2 = "47bd5f64f7be5578";

$obj =
[
    'people' =>
    [
        $p1 =>
        [
            'first_name' => 'John',
            'last_name' => 'Smith',
            'suffix' => 'Sr',
            'results' => [ 'math' => 82, 'english' => 79, 'science' => 50 ]
        ],

        $p2 =>
        [
            'first_name' => 'Timothy',
            'middle_name' => 'Bob',
            'last_name' => 'Jones'
        ]
    ]
];

if (isset($obj['people'][$p1]['results']['science']))
{
    echo $obj['people'][$p1]['results']['science'];
}
echo "\n";
if (!isset($obj['people'][$p2]['results']['science']))
{
    echo 'Not Found';
}
echo "\n";
?>

There are many solutions to this in JavaScript like the answers given here in StackOverflow.

But I think the best solution lies in ECMA 262 (ES2020) which now all browsers support.

let p1 = "a9bedbd81019b877";
let p2 = "47bd5f64f7be5578";

let obj =
{
    'people' :
    {
        [p1] :
        {
            'first_name': 'John',
            'last_name': 'Smith',
            'suffix': 'Sr',
            'results': { 'math': 82, 'english': 79, 'science': 50 }
        },

        [p2] :
        {
            'first_name': 'Timothy',
            'middle_name': 'Bob',
            'last_name': 'Jones',
        }
    }
}

if (obj?.people?.[p1]?.results?.science)
{
    console.log('science = ', obj?.people?.[p1]?.results?.science);
}

console.log(obj?.people?.[p2]?.results?.science);

Output :

science =  50
undefined
 
Share this