匹配树结构 并删除树节点(将B树的id存起来,然后根据存起来的id,匹配到A中节点id保留A该节点)

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)

猜你喜欢

转载自blog.csdn.net/sinat_36017053/article/details/122480265