Existing:
[{ "id": 1005300265, "name": "Shen Lun", "parentId": "100520929", "children": [{ "id": 1005300266, "name": "Big Composition", "parentId" ": "1005300265", "children": null }] }, { "id": 1005300264, "name": "interview", "parentId": "100520929", "children": [{ "id": 1005300270, "name": "structured", "parentId": "1005300264", "children": null }, { "id": 1005300269, "name": "structured group", "parentId": "1005300264", " children": null }] }, { "id": 100520985, "name": "Writing test-quantity relationship",
"parentId": "100520929",
"children": null
}, { "id": 1005300259, "name": "line test", "parentId": "100520929", "children": [{ "id": 1005300258 , "name": "Speech Comprehension and Expression", "parentId": "1005300259", "children": null }, { "id": 1005300263, "name": "Data Analysis", "parentId": "1005300259" , "children": null }, { "id": 1005300262, "name": "quantity relation", "parentId": "1005300259", "children": null }, { "id": 1005300261, "name": "Common sense", "parentId": "1005300259", "children": null }] }, {
"id": 100520982,
"name": "Written Test General Course",
"parentId": "100520929",
"children": null
}, { "id": 100520984, "name": "Written Test - Common Sense", "parentId": "100520929", "children": null }] Goal: replace children with "twoSubject", and add "isTwoSubject": true, // change key // tree node filter treeKeyFilter(tree, func) { var that = this return tree.map(node => ({ …node })).filter(node => { node.twoSubject = node.children && that.treeKeyFilter(node.children, func) node.isTwoSubject = node .twoSubject && node.twoSubject.length ? true : false delete node.children
return func(node) || (node.twoSubject && node.twoSubject.length)
})
},
[{ "id": 1005300259, "name": "line test", "isTwoSubject": true, "twoSubject": [ { "id": 1005300258, "name": "Verbal Comprehension and Expression" }, { "id": 1005300257, "name": "Judgment Reasoning" }, { "id": 1005300261, "name": "Common sense judgment " }, { "id": 1005300262, "name": "quantity relationship" }, { "id": 1005300263, "name": "Data analysis" }] }, { "id": 1005300264, "name": "interview", "isTwoSubject": true, "twoSubject": [{ "id": 1005300270, "name": "structured"
}, { "id": 1005300269, "name": "structured group" }, { "id": 1005300268, "name": "leaderless group" }] }, { "id": 1005300265, "name" : "Shen Lun", "isTwoSubject": true, "twoSubject": [{ "id": 1005300266, "name": "Major Composition" }, { "id": 1005300267, "name": "Small Question Type" } ] }, { "id": 100520984, "name": "Writing test - common sense", "isTwoSubject": false, "twoSubject": null }, { "id": 100520985, "name": "Writing test -quantity relation", "isTwoSubject": false, "twoSubject": null }]
var array = [{
"name": "公务员",
"parentId": null,
"children": [{
"id": 100520982,
"name": "笔试全科",
"parentId": "100520929",
"children": null
}, {
"id": 100520984,
"name": "笔试行测-常识",
"parentId": "100520929",
"children": null
}, {
"id": 100520985,
"name": "笔试行测-数量关系",
"parentId": "100520929",
"children": null
}, {
"id": 1005300259,
"name": "行测",
"parentId": "100520929",
"children": null
}, {
"id": 1005300264,
"name": "面试",
"parentId": "100520929",
"children": null
}, {
"id": 1005300265,
"name": "申论",
"parentId": "100520929",
"children": [{
"id": 1005300267,
"name": "小题型",
"parentId": "1005300265",
"children": null
}, {
"id": 1005300266,
"name": "大作文",
"parentId": "1005300265",
"children": null
}]
}]
}]
// 树节点过滤
function treeFilter (tree, func) {
return tree.map(node => ({
...node })).filter(node => {
node.twoSubject = node.children && treeFilter(node.children, func)
node.isTwoSubject = node.twoSubject && node.twoSubject.length > 0
delete node.children
return func(node) || (node.twoSubject && node.twoSubject.length)
})
}
// 获取过滤后的A tree
var filteredArray = treeFilter(array, node=>{
return true
})
console.log(filteredArray)
const ass = (data) => {
3 let item = [];
4 data.map((list, i) => {
5 let newData = {
};
6 newData.key= list.id;
7 newData.value = list.id;
8 newData.title = list.name;
9 newData.children = list.children ? ass(children) : []; //如果还有子集,就再次调用自己
10 item.push(newData);
11 });
12 return item;
13 }