Часто мы попадаем в ситуацию, когда нам нужно получить доступ к ключу в объекте, затем мы в конечном итоге проверяем наличие этого ключа в объекте, а затем получаем к нему доступ, для этого мы можем сделать что-то вроде ниже

Выглядит плохо. Особенно, когда объекты глубоко вложены, проверка наличия каждого ключа затрудняет читаемость кода.

Вместо этого мы можем написать функцию, которая принимает объект и путь ключа в этом объекте в качестве аргументов и возвращает значение ключа, если он существует, или null, если он не существует.

Давай попробуем. Сначала давайте получим наш ответ JSON, который даст вам список заказов, которые пользователь разместил на нашем веб-сайте.

let userOrder = {
    user: {
        orders: [
            { state: "dispatched" , price: 2333 },
            { state: "delivered" , price: 3333 },
            { state: "delivered" , price: 444 },
            ...
        ]   
    }
}

Теперь мне нужно получить доступ к последнему заказу в массиве заказов, путь к нему выглядит так:

let objPath = ["user", "orders", 0 , "state"]

Теперь напишем функцию

const findTheObjectKey = (path, obj) => 
    path.reduce((acc, cur) => 
        acc[cur] ? acc[cur] : null
    , obj)

findTheObjectKey - это стрелочная функция, которая возвращает значение из возвращаемого значения функции уменьшения. Теперь, когда я запускаю это

let res = findTheObjectKey(objPath, userOrder);
console.log(res);

Результат вышеупомянутого будет «отправлен».

Чтобы объяснить вышесказанное, мы применяем функцию сокращения к массиву путей.

В первый раз acc будет передаваемым объектом, cur будет путем [0], поэтому мы проверяем, существует ли userOrder [«user»] или нет, если он существует, мы возвращаем объект пользователя обратно, поэтому второй цикл acc будет объектом пользователя. и cur будет путем [1], мы снова проверяем, и цикл продолжается…

Объяснение вышеупомянутой функции уменьшения в другом моем сообщении https://medium.com/@spoo.naidu/js-reduce-function-6841c0f7c0ff