Javascript 未处理的拒绝(TypeError):无法读取属性';儿童';未定义的

Javascript 未处理的拒绝(TypeError):无法读取属性';儿童';未定义的,javascript,reactjs,axios,Javascript,Reactjs,Axios,我正在尝试使用axios从RESTAPI获取数据 我想将数据存储在数组中,并附加新的属性子项 但我犯了一个错误 这是我的密码: var categoriesTree = {}; axios.get('https://akkar.market/wp-json/wp/v2/job_listing_category?per_page=100') .then(response => { categoriesTree = response.data categoriesTree.forEac

我正在尝试使用axios从RESTAPI获取数据 我想将数据存储在数组中,并附加新的属性子项 但我犯了一个错误 这是我的密码:

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)
我得到这个错误:

我不确定,如果(!category.parent in categoriesTree)下的
是什么意思,但它看起来总是会返回
false
。如果(!categoriesTree.parent)
,请尝试将此条件更改为
,我想它会起作用。

看起来有几个问题:

  • 中!category.parent在categoriesTree
    中,您需要使用
    category.parent
    的逻辑NOT(将是
    true
    false
    ),并在
    操作中使用该结果。在
    表达式:
    中的
    周围需要
    ()
    !(category.parent在categoriesTree中)

  • 即使进行了修订,也会在
    categoriesTree
    中检查名称为
    category.parent
    值的属性。但是,然后创建一个名为
    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});
    
    if (!categoriesTree.parent)) {
        categoriesTree.parent = {'name': '', 'children': []};
    }
    categoriesTree.parent['children'].push({'name': category.name, 'id': category.id});
    

    如果
    categoriesTree
    没有名为
    x
    的属性,或者该属性将有一个对象引用作为值,则可以使用
    If(!categoriesTree.x
    而不是
    If(!(“x”在categoriesTree中))`。将其应用于上述两个选项:

    if (!categoriesTree[category.parent])) {
        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});
    
    if (!categoriesTree.parent)) {
        categoriesTree.parent = {'name': '', 'children': []};
    }
    categoriesTree.parent['children'].push({'name': category.name, 'id': category.id});
    

    尝试记录
    categoriesTree['parent']
    并查看它有什么我的猜测是
    categoriesTree.parent
    不值得0,但也不值得
    Array
    。我尝试了,但它在这一行categoriesTree['parent']['children']上仍然给我错误。push({'name':category.name,'id':category.id});哦,对不起,我在回答中犯了一个错误,不是
    如果(!category.parent)
    而是
    如果(!categoriesTree.parent)
    :)