[英]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)
看来有两个问题:
在!category.parent in categoriesTree
,您将采用category.parent
的逻辑NOT(将为true
或false
),并在in
操作中使用该结果。 您需要in
表达式中使用()
: !(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
将不具有名为x
的属性,或者该属性将具有对象引用作为值,则可以使用if (!categoriesTree.x
) rather 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.