var arrayB = [{
"id": 100520929,
"name": "公务员",
"parentId": null,
"children": [{
"id": 1005300265,
"name": "申论",
"parentId": "100520929",
"children": [{
"id": 1005300266,
"name": "大作文",
"parentId": "1005300265",
"children": null
}]
}, {
"id": 1005300264,
"name": "面试",
"parentId": "100520929",
"children": [{
"id": 1005300270,
"name": "结构化",
"parentId": "1005300264",
"children": null
}, {
"id": 1005300269,
"name": "结构化小组",
"parentId": "1005300264",
"children": null
}]
}, {
"id": 100520985,
"name": "笔试行测-数量关系",
"parentId": "100520929",
"children": null
}, {
"id": 1005300259,
"name": "行测",
"parentId": "100520929",
"children": [{
"id": 1005300258,
"name": "言语理解与表达",
"parentId": "1005300259",
"children": null
}, {
"id": 1005300263,
"name": "资料分析",
"parentId": "1005300259",
"children": null
}, {
"id": 1005300262,
"name": "数量关系",
"parentId": "1005300259",
"children": null
}, {
"id": 1005300261,
"name": "常识判断",
"parentId": "1005300259",
"children": null
}]
}]
}]
var arrayA = [{
“id”: 1005300259,
“name”: “行测”,
“isTwoSubject”: true,
“twoSubject”: [{
“id”: 1005300258,
“name”: “言语理解与表达”
}, {
“id”: 1005300257,
“name”: “判断推理”
}, {
“id”: 1005300261,
“name”: “常识判断”
}, {
“id”: 1005300262,
“name”: “数量关系”
}, {
“id”: 1005300263,
“name”: “资料分析”
}]
}, {
“id”: 1005300264,
“name”: “面试”,
“isTwoSubject”: true,
“twoSubject”: [{
“id”: 1005300270,
“name”: “结构化”
}, {
“id”: 1005300269,
“name”: “结构化小组”
}, {
“id”: 1005300268,
“name”: “无领导小组”
}]
}, {
“id”: 1005300265,
“name”: “申论”,
“isTwoSubject”: true,
“twoSubject”: [{
“id”: 1005300266,
“name”: “大作文”
}, {
“id”: 1005300267,
“name”: “小题型”
}]
}, {
“id”: 100520984,
“name”: “笔试行测-常识”,
“isTwoSubject”: false,
“twoSubject”: null
}, {
“id”: 100520985,
“name”: “笔试行测-数量关系”,
“isTwoSubject”: false,
“twoSubject”: null
}]
小程序版
bKeys ={}
// 获取B的所有ID
flatArrayB(nodes) {
var that = this
nodes.map(node => {
if (node.children && node.children.length) {
that.flatArrayB(node.children)
}
that.bKeys[node.id] = ‘1’
})
},
// 树节点过滤
treeFilter(tree, func) {
var that = this
return tree.map(node => ({
...node
})).filter(node => {
node.twoSubject = node.twoSubject && that.treeFilter(node.twoSubject, func)
return func(node) || (node.twoSubject && node.twoSubject.length)
})
},
var arrayA = [{
"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
}]
}]
}]
var arrayB = [{
"id": 1005300259,
"name": "行测",
"isTwoSubject": true,
"twoSubject": [{
"id": 1005300258,
"name": "言语理解与表达"
}, {
"id": 1005300257,
"name": "判断推理"
}, {
"id": 1005300261,
"name": "常识判断"
}, {
"id": 1005300262,
"name": "数量关系"
}, {
"id": 1005300263,
"name": "资料分析"
}]
}, {
"id": 1005300264,
"name": "面试",
"isTwoSubject": true,
"twoSubject": [{
"id": 1005300270,
"name": "结构化"
}, {
"id": 1005300269,
"name": "结构化小组"
}, {
"id": 1005300268,
"name": "无领导小组"
}]
}, {
"id": 1005300265,
"name": "申论",
"isTwoSubject": true,
"twoSubject": [{
"id": 1005300266,
"name": "大作文"
}, {
"id": 1005300267,
"name": "小题型"
}]
}, {
"id": 100520984,
"name": "笔试行测-常识",
"isTwoSubject": false,
"twoSubject": null
}, {
"id": 100520985,
"name": "笔试行测-数量关系",
"isTwoSubject": false,
"twoSubject": null
}]
// 获取B的所有ID
var bKeys = {}
function flatArrayB(nodes){
nodes.map(node => {
if(node.twoSubject && node.twoSubject.length){
flatArrayB(node.twoSubject)
}
bKeys[node.id] = '1'
})
}
flatArrayB(arrayB)
// 树节点过滤
function treeFilter (tree, func) {
return tree.map(node => ({ ...node })).filter(node => {
node.children = node.children && treeFilter(node.children, func)
return func(node) || (node.children && node.children.length)
})
}
// 获取过滤后的A tree
var filteredA = treeFilter(arrayA, node=>{
return bKeys[node.id] != undefined
})
console.log(filteredA)