【发布时间】:2018-10-23 14:38:45
【问题描述】:
我正在尝试从平面数组构建树数组,平面数组中的每个项目都有两个属性需要用于构建树数组,它们是 1. 类别。 2. subCategrie 是字符串数组。
let data = [
{
id: 1,
name: "Zend",
category: "php",
subCategory: ["framework"]
},
{
id: 2,
name: "Laravel",
category: "php",
subCategory: ["framework"]
},
{
id: 3,
name: "Vesion 5",
category: "php",
subCategory: ["versions"]
},
{
id: 4,
name: "Angular",
category: "frontend",
subCategory: ["framework", "typescript"]
},
{
id: 5,
name: "Aurelia",
category: "frontend",
subCategory: ["framework", "typescript"]
},
{
id: 6,
name: "JQuery",
category: "frontend",
subCategory: []
}
];
应该是
let tree = [
{
name: "php",
children: [
{
name: "framework",
children: [
{
id: 1,
name: "Zend"
},
{
id: 2,
name: "Laravel"
}
]
},
{
name: "versions",
children: [
{
id: 3,
name: "Vesion 5"
}
]
}
]
}
// ...
];
有没有解决类似问题的文章、链接? 我尝试了很多次,但在尝试构建子类别时卡住了。
这是我最后一次抛出错误的尝试,我知道这是错误的,但它是为那些想看到我的尝试的人准备的
const list = require('./filter.json')
let tree = {};
for (let filter of list) {
if (tree[filter.category]) {
tree[filter.category].push(filter);
} else {
tree[filter.category] = [filter];
}
}
function buildChildren(list, subcategories, category, index) {
let tree = {}
for (let filter of list) {
if (filter.subcategory.length) {
for (let i = 0; i < filter.subcategory.length; i++) {
let branch = list.filter(item => item.subcategory[i] === filter.subcategory[i]);
branch.forEach(item =>{
if (tree[filter.subcategory[i]]){
tree[filter.subcategory[i]] = tree[filter.subcategory[i]].push(item)
}else{
tree[item.subcategory[i]] = [item]
}
})
}
}
}
console.log('tree ', tree);
}
【问题讨论】:
-
您应该提供您尝试解决整个问题的代码!
-
@SMH 你有任何代码尝试吗?
-
是的,我确实有代码尝试,这是我最后一次尝试,它会引发错误,而且非常复杂。我会提出这个问题
标签: javascript arrays data-structures