Задать вопрос
@boga-net

Как обратиться к ключам и значениям объекта через переменную?

Всем привет. Есть объект с категориями и функция выбора конкретной категории. Перебрал объект, вывел все категории, жмякнул по кнопке и записал в глобальную переменную выбранную категорию. Далее нужно вытащить из объекта всё, что соответствует выбранной категории : ключи и значения. Но не получается. Вот объект :

var categories = {
  'Animals' : [
    { Camel: 'http://pngimg.com/uploads/camel/camel_PNG2920.png' },
    { Elephant: 'https://orig00.deviantart.net/fbb1/f/2014/179/d/6/elephant_png_by_wdwparksgal_stock-d7oegd8.png' }
  ],
  'Fruits' : [
    { Apple: 'http://markbeechmarketing.com/wp-content/uploads/2013/03/GreenApple.png' },
    { Aprikose: 'http://www.boeschbodenspies.com/wp-content/uploads/2017/08/apricot.png' }
  ]
};


В функции я получаю кол-во категорий, перебираю объект и вывожу все категории на экран в виде кнопок. В качестве текста этой кнопки, используется ключ объекта. Если я не очень понятно выразился, то у меня кол-во кнопок, соответствующее числу категория объекта, в данном случае : Fruits и Animals.

function shooseCategory() {
    var allCategories = Object.keys(categories);
    // Создать кнопки с категориями
    var categoriesArray = [];
    for (var i = 0; i < allCategories.length; i++) {
      categoriesArray.push('<div class="category-btn">'+ allCategories[i] +'</div>');
    }
  };


Далее при клике на какую-то категорию, я получаю текущую выбранную категорию, точнее текст кнопки (соответствующий ключу объекта)

// Помещаю это в глобальную переменную
(клик) {
    checkedCategory = $(this).text();
}


Ок, категория выбрана. У нас есть слово, например, Fruits. Теперь нужно достать из объекта соответствующие ключи и свойства. И вот тут тупняк..

У нас есть
var allCategories = Object.keys(categories);
var checkedCategory = 'Fruits';
var category = Object.keys(categories[checkedCategory]); // Возвращает числовые индексы
var categoryLength = allCategories.length; // Возвращает длину

var category = allCategories.checkedCategory; // Возвращает undefined
var category = allCategories[checkedCategory]; // Возвращает undefined
var category = allCategories[Fruits]; // Возвращает Fruits not defined
var category = allCategories.Fruits; // Возвращает  Fruits not defined
var category = Object.keys(categories.checkedCategory); // can't convert undefined to object
var category = Object.keys(categories[checkedCategory]); // can't convert undefined to object


Я уже не могу вытаскивать из объекта нужные мне свойства по ключам, как здесь :
var arr = {
	width: 300
};

var w = 'width';
var res = arr[w];
console.log(res);


Это потому что я работаю с jSON объектом с вложенными объектами и массивами (проще прощения, если напутал с терминологией) ? Мне теперь, получается, надо заново перебирать весь объект с помощью $.each и сравнивать его с выбранной категорией ? Или что, где, как ?..

Спасибо, что дочитали до конца

На всякий случай, задача в том, чтобы вытащить из объекта ключи и значения по имени вложенного объекта.
  • Вопрос задан
  • 6998 просмотров
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
categories[checkedCategory] - здесь будет возвращен массив категорий. Массив нельзя передать в Object.keys() - потому как метод принимает объект а не массив. Получив массив категорий вы должны пройтись по нему циклом что бы получить сами категории ну или что ещё лучше методом map.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
streetflush
@streetflush
для того чтобы работало как вы хотите, данные должны иметь вид
var categories = {
  'Animals' : 
    { Camel: 'http://pngimg.com/uploads/camel/camel_PNG2920.png' ,
     Elephant: 'https://orig00.deviantart.net/fbb1/f/2014/179/d/6/elephant_png_by_wdwparksgal_stock-d7oegd8.png' }
  ,
  'Fruits' : 
    { Apple: 'http://markbeechmarketing.com/wp-content/uploads/2013/03/GreenApple.png' ,
     Aprikose: 'http://www.boeschbodenspies.com/wp-content/uploads/2017/08/apricot.png' }
  
};
Ответ написан
Ваш ответ на вопрос

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

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