Необработанный отказ (TypeError): невозможно прочитать свойство 'children' из undefined - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь получить данные из остальных API, используя axios, и я хочу сохранить данные в массиве и добавить новые дочерние свойства, но я получаю ошибку, вот мой код:

var categoriesTree = {};
axios.get('https://akkar.market/wp-json/wp/v2/job_listing_category?per_page=100')
.then(response => {
  categoriesTree = response.data
  categoriesTree.forEach(category => {
    if (category.parent === 0) {
      if (!(category.id in categoriesTree)) {
        categoriesTree[category.id] = {'name': category.name, 'children': []};
      } else {
        categoriesTree[category.id]['name'] = category.name;
      }
    } else {
      if (!category.parent in categoriesTree) {
        categoriesTree['parent'] = {'name': '', 'children': []};
      }
      categoriesTree['parent']['children'].push({'name': category.name, 'id': category.id});
    }
  })
})
console.log(categoriesTree)

я получаюэта ошибка: enter image description here

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Похоже, есть несколько проблем:

  1. В !category.parent in categoriesTree вы бы взяли логическое НЕ category.parent (которое будет true или false) и используя этот результат в операции in.Вам нужно () вокруг выражения in: !(category.parent in categoriesTree)

  2. Даже с ревизией, которая проверяет свойство, имя которого равно category.parent в categoriesTree,Но затем вы создаете свойство с именем parent, а не свойство с именем из category.parent.

Если предполагается, что свойство имеет значение category.parent, используйте этовместо 'parent':

if (!(category.parent in categoriesTree)) {
    categoriesTree[category.parent] = {'name': '', 'children': []};
}
categoriesTree[category.parent]['children'].push({'name': category.name, 'id': category.id});

Если предполагается, что он будет называться parent (буквально), используйте вместо этого последовательно:

if (!("parent" in categoriesTree)) {
    categoriesTree.parent = {'name': '', 'children': []};
}
categoriesTree.parent['children'].push({'name': category.name, 'id': category.id});

Если categoriesTreeлибо не будет иметь свойства с именем x, либо свойство будет иметь ссылку на объект в качестве значения, вы можете использовать if (!categoriesTree.x) rather than if (! ("x" в categoryTree)) `.Применяя это к двум опциям, указанным выше:

if (!categoriesTree[category.parent])) {
    categoriesTree[category.parent] = {'name': '', 'children': []};
}
categoriesTree[category.parent]['children'].push({'name': category.name, 'id': category.id});

Если предполагается, что он называется parent (в буквальном смысле), то используйте вместо этого последовательно:

if (!categoriesTree.parent)) {
    categoriesTree.parent = {'name': '', 'children': []};
}
categoriesTree.parent['children'].push({'name': category.name, 'id': category.id});
0 голосов
/ 01 октября 2018

Я не уверен, что вы имеете в виду под if (!category.parent in categoriesTree), но похоже, что он всегда вернет false.Попробуйте изменить это условие просто на if (!categoriesTree.parent), и я полагаю, оно будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...