Задать вопрос
@iliya2004
Верстальщик, программист, дизайнер

Как получить первый объект объекта объекта?

categ = "fun";
uslugi[categ[Object.keys(uslugi[categ])[0]]];

Выдаёт undefined.

Я хотел получить нулевой объект из объекта fun, который, в свою очередь, находится в uslugi.

var uslugi = {
    fun : {
        zero : {
        }
        first : {
        }
    }}


Ещё раз, нужно получить нулевой объект из fun. При том, что fun в переменной categ.

Данные в которых осуществляю поиск
const uslugi = {
    "internet": {
        "vip": {
            "price": "800",
            "per": "month",
            "title": "VIP—Интернет",
            "disc": "Для тех, кто качает много.",
            "toggled": "0"
        },
        "maxi": {
            "price": "700",
            "per": "month",
            "title": "Maxi—Интернет",
            "disc": "Хватит на каждый день.",
            "toggled": "0"
        },
        "ipv6": {
            "price": "0",
            "per": "month",
            "title": "Доступ к IPv6",
            "disc": "Более продвинутоее соеденение с интернетом.",
            "toggled": "1"
        },
        "barandmauer": {
            "price": "2",
            "per": "day",
            "title": "Брандмауэр",
            "disc": "Автоматическая проверка трафика на наличие угроз и защита ваших данных.",
            "toggled": "1"
        }
    },
    "sales_for_calls": {
        "mezhgorod": {
            "price": "40",
            "per": "month",
            "title": "Выгодный межгород",
            "disc": "Единая цена на все номера России.",
            "toggled": "0"
        },
        "mezhcity": {
            "price": "75",
            "per": "month",
            "title": "Выгодные международные звонки",
            "disc": "Звонки в любую страну мира по привлекательной цене.",
            "toggled": "0"
        }
    },
    "smses": {
        "sms100": {
            "price": "50",
            "per": "month",
            "title": "Пакет 100 SMS",
            "disc": "Отправляйте 100 сообщений по предоплаченной цене.",
            "toggled": "0"
        },
        "sms300": {
            "price": "100",
            "per": "month",
            "title": "Пакет 300 SMS",
            "disc": "Отправляйте 300 сообщений по предоплаченной цене.",
            "toggled": "0"
        },
        "mms10": {
            "price": "0",
            "per": "month",
            "title": "MMS пакет 10",
            "disc": "Стоимость подключения: 20 руб.",
            "toggled": "0"
        }
    },
    "rouming": {
        "zeroWithout": {
            "price": "145",
            "per": "month",
            "title": "Ноль без границ",
            "disc": "Бесплатные звонки в поездках по миру.",
            "toggled": "0"
        },
        "bitGran": {
            "price": "450",
            "per": "month",
            "title": "БИТ за границей",
            "disc": "Подойдет для просмотра почты и соцсетей.Если вы не пользуетесь интернетом за границей, плата за опцию не списывается",
            "toggled": "0"
        },
        "maxiGran": {
            "price": "700",
            "per": "month",
            "title": "Макси БИТ за границей",
            "disc": "Рекомендуем для доступа к почте, общения в соцсетях, использования карт и навигации. Если вы не пользуетесь интернетом за границей, плата за опцию не списывается.",
            "toggled": "0"
        }
    },
    "fun": {
        "mtsAmedia": {
            "price": "600",
            "per": "month",
            "title": "эМТС Amediateka",
            "disc": "Тысячи сериалов в русской озвучке и на английском языке с субтитрами.",
            "toggled": "0"
        },
        "matSport": {
            "price": "60",
            "per": "month",
            "title": "эМТС спорт",
            "disc": "Пакет каналов для любителей спорта.",
            "toggled": "0"
        },
        "mult": {
            "price": "0",
            "per": "month",
            "title": "Подписка “Мульт”",
            "disc": "«Ми-ми-мишки», «Сказочный патруль» и еще 7000 серий любимых мультиков в детском онлайн-кинотеатре.",
            "toggled": "0"
        }
    },
    "zero": {
        "obesh": {
            "price": "0",
            "per": "month",
            "title": "Обещанный платеж",
            "disc": "Даже если у вас ноль на счете, вы всегда сможете мгновенно пополнить свой баланс с помощью мобильного телефона.",
            "toggled": "0"
        },
        "popolMne": {
            "price": "0",
            "per": "month",
            "title": "Пополни мне счет",
            "disc": "Отправляйте бесплатные сообщения с просьбой пополнить счет.",
            "toggled": "0"
        },
        "mult": {
            "price": "0",
            "per": "month",
            "title": "Подписка “Мульт”",
            "disc": "«Ми-ми-мишки», «Сказочный патруль» и еще 7000 серий любимых мультиков в детском онлайн-кинотеатре.",
            "toggled": "0"
        }
    }
}
  • Вопрос задан
  • 1828 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 4
Судя по одному из твоих комментов структура такая:
const uslugi = {
  "fun":{
      "mtsAmedia":{
         "price":"600",
         "per":"month",
         "title":"эМТС Amediateka",
         "disc":"Тысячи сериалов в русской озвучке и на английском языке с субтитрами.",
         "toggled":"0"
      },
      "matSport":{
         "price":"60",
         "per":"month",
         "title":"эМТС спорт",
         "disc":"Пакет каналов для любителей спорта.",
         "toggled":"0"
      },
      "mult":{
         "price":"0",
         "per":"month",
         "title":"Подписка “Мульт”",
         "disc":"«Ми-ми-мишки», «Сказочный патруль» и еще 7000 серий любимых мультиков в детском онлайн-кинотеатре.",
         "toggled":"0"
      }
   }
}


Тогда, чтобы получить первый элемент в uslugi.fun делаем так:

const category = 'fun'
const firstFunName = Object.keys(uslugi[category])[0]
const data = uslugi[category][firstFunName]
console.log(data.price, data.title)
Ответ написан
@loonny
let categ = "fun"; // Название категории
let keysName = Object.keys(uslugi[categ]) // Получаем массив ключей

console.log(uslugi[categ][keysName[0]]) // keysName[0] - Выдаст строку с именем первого ключа
Ответ написан
Комментировать
Рекомендую почитать
https://stackoverflow.com/questions/5525795/does-j...
потому что с Object.keys бывают сюрпризы

const uslugi = {
    "internet": {
        "vip": {
            "price": "800",
            "per": "month",
            "title": "VIP—Интернет",
            "disc": "Для тех, кто качает много.",
            "toggled": "0"
        },
        "maxi": {
            "price": "700",
            "per": "month",
            "title": "Maxi—Интернет",
            "disc": "Хватит на каждый день.",
            "toggled": "0"
        },
        "ipv6": {
            "price": "0",
            "per": "month",
            "title": "Доступ к IPv6",
            "disc": "Более продвинутоее соеденение с интернетом.",
            "toggled": "1"
        },
        "barandmauer": {
            "price": "2",
            "per": "day",
            "title": "Брандмауэр",
            "disc": "Автоматическая проверка трафика на наличие угроз и защита ваших данных.",
            "toggled": "1"
        }
    },
    "sales_for_calls": {
        "mezhgorod": {
            "price": "40",
            "per": "month",
            "title": "Выгодный межгород",
            "disc": "Единая цена на все номера России.",
            "toggled": "0"
        },
        "mezhcity": {
            "price": "75",
            "per": "month",
            "title": "Выгодные международные звонки",
            "disc": "Звонки в любую страну мира по привлекательной цене.",
            "toggled": "0"
        }
    },
    "smses": {
        "sms100": {
            "price": "50",
            "per": "month",
            "title": "Пакет 100 SMS",
            "disc": "Отправляйте 100 сообщений по предоплаченной цене.",
            "toggled": "0"
        },
        "sms300": {
            "price": "100",
            "per": "month",
            "title": "Пакет 300 SMS",
            "disc": "Отправляйте 300 сообщений по предоплаченной цене.",
            "toggled": "0"
        },
        "mms10": {
            "price": "0",
            "per": "month",
            "title": "MMS пакет 10",
            "disc": "Стоимость подключения: 20 руб.",
            "toggled": "0"
        }
    },
    "rouming": {
        "zeroWithout": {
            "price": "145",
            "per": "month",
            "title": "Ноль без границ",
            "disc": "Бесплатные звонки в поездках по миру.",
            "toggled": "0"
        },
        "bitGran": {
            "price": "450",
            "per": "month",
            "title": "БИТ за границей",
            "disc": "Подойдет для просмотра почты и соцсетей.Если вы не пользуетесь интернетом за границей, плата за опцию не списывается",
            "toggled": "0"
        },
        "maxiGran": {
            "price": "700",
            "per": "month",
            "title": "Макси БИТ за границей",
            "disc": "Рекомендуем для доступа к почте, общения в соцсетях, использования карт и навигации. Если вы не пользуетесь интернетом за границей, плата за опцию не списывается.",
            "toggled": "0"
        }
    },
    "fun": {
        "mtsAmedia": {
            "price": "600",
            "per": "month",
            "title": "эМТС Amediateka",
            "disc": "Тысячи сериалов в русской озвучке и на английском языке с субтитрами.",
            "toggled": "0"
        },
        "matSport": {
            "price": "60",
            "per": "month",
            "title": "эМТС спорт",
            "disc": "Пакет каналов для любителей спорта.",
            "toggled": "0"
        },
        "mult": {
            "price": "0",
            "per": "month",
            "title": "Подписка “Мульт”",
            "disc": "«Ми-ми-мишки», «Сказочный патруль» и еще 7000 серий любимых мультиков в детском онлайн-кинотеатре.",
            "toggled": "0"
        }
    },
    "zero": {
        "obesh": {
            "price": "0",
            "per": "month",
            "title": "Обещанный платеж",
            "disc": "Даже если у вас ноль на счете, вы всегда сможете мгновенно пополнить свой баланс с помощью мобильного телефона.",
            "toggled": "0"
        },
        "popolMne": {
            "price": "0",
            "per": "month",
            "title": "Пополни мне счет",
            "disc": "Отправляйте бесплатные сообщения с просьбой пополнить счет.",
            "toggled": "0"
        },
        "mult": {
            "price": "0",
            "per": "month",
            "title": "Подписка “Мульт”",
            "disc": "«Ми-ми-мишки», «Сказочный патруль» и еще 7000 серий любимых мультиков в детском онлайн-кинотеатре.",
            "toggled": "0"
        }
    }
}

console.log(uslugi.fun[Object.keys(uslugi.fun)[0]])
Ответ написан
ArsenyMatytsyn
@ArsenyMatytsyn Куратор тега JavaScript
Руководитель frontend направления, предприниматель
1. Получая массив ключей и обращаясь к объекту через первый ключ.
2. Либо с другой стороны но те же яйца.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
dimovich85
@dimovich85 Куратор тега JavaScript
https://u-academy.net/
scottparker
@scottparker
ну и объясняешь ты конечно)
uslugi[categ][0], думаю так
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы