我正在尝试使用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)
答案 0 :(得分:3)
似乎有两个问题:
在!category.parent in categoriesTree
中,您将采用category.parent
(将为true
或false
)的逻辑非,并在{{ 1}}操作。您需要在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
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)
,我想它会起作用。