未处理的拒绝(TypeError):无法读取未定义的属性“子级”

时间:2018-10-01 09:28:46

标签: javascript reactjs axios

我正在尝试使用axios从rest api获取数据 我想将数据存储在数组中并追加新的属性子级 但我遇到错误 这是我的代码:

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 :(得分:3)

似乎有两个问题:

  1. !category.parent in categoriesTree中,您将采用category.parent(将为truefalse)的逻辑非,并在{{ 1}}操作。您需要在in表达式周围加上()in

  2. 即使是修订版,它也会检查!(category.parent in categoriesTree)中名称为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的属性,或者该属性将对象引用作为值,则可以使用xif (!categoriesTree.x if(! (类别树中的“ x”))。将其应用于上面的两个选项:

rather than

如果应该将其称为if (!categoriesTree[category.parent])) { categoriesTree[category.parent] = {'name': '', 'children': []}; } categoriesTree[category.parent]['children'].push({'name': category.name, 'id': category.id}); (字面意思),则应始终使用该名称:

parent

答案 1 :(得分:1)

我不确定您在if (!category.parent in categoriesTree)下的含义,但看起来它总是会返回false。尝试简单地将此条件更改为if (!categoriesTree.parent),我想它会起作用。