繁体   English   中英

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

[英]Unhandled Rejection (TypeError): Cannot read property 'children' of undefined

我正在尝试使用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)

我收到此错误: 在此处输入图片说明

看来有两个问题:

  1. !category.parent in categoriesTree ,您将采用category.parent的逻辑NOT(将为truefalse ),并在in操作中使用该结果。 您需要in表达式中使用()!(category.parent in categoriesTree)

  2. 即使修改,即检查其名称是值的属性category.parentcategoriesTree 但是随后您创建了一个名为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.xrather than if(!(categoryTree中的“(x”))`。 将其应用于以上两个选项:

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});

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM