1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
| let sourceData = [ { value: "B04A05", label: "市容环境", children: [ { value: "B04A05A02", label: "中华人民共和国固体废物污染环境防治法", children: [], }, { value: "B04A05A03", label: "中华人民共和国大气污染防治法", children: [], }, { value: "B04A05A04", label: "河北省大气污染防治条例", children: [], }, { value: "B04A05A05", label: "中华人民共和国噪声污染防治法", children: [], }, { value: "B04A05A06", label: "河北省城市市容和环境卫生条例", children: [], }, ], }, { value: "B04A06", label: "建筑、生活垃圾", children: [ { value: "B04A06A01", label: "河北省城乡生活垃圾分类管理条例", children: [], }, { value: "B04A06A02", label: "城市生活垃圾管理办法", children: [], }, { value: "B04A06A03", label: "河北省餐厨废弃物管理办法", children: [], }, { value: "B04A06A04", label: "城市建筑垃圾管理规定", children: [], }, ], }, { value: "B04A07", label: "市政交通", children: [ { value: "B04A07A01", label: "城市道路管理条例", children: [ { value: "B04A07A0101", label: "城市建筑垃圾规定", children: [], }, ], }, ], }, { value: "B04A08", label: "燃气管理", children: [ { value: "B04A08A01", label: "城镇燃气管理条例", children: [], }, { value: "B04A08A02", label: "河北省燃气管理条例", children: [], }, ], }, { value: "B04A09", label: "园林绿化", children: [ { value: "B04A09A01", label: "河北省绿化条例", children: [], }, ], }, ]
function filterByLabel(data, targetLabel) { function getLeafNodes(treeData) { function traverse(node, parentsValue = [], parentsLabel = []) { const valuesChain = [...parentsValue, node.value] const labelChain = [...parentsLabel, node.label]
if (!node.children || node.children.length === 0) { return [{ label: labelChain.join("/"), values: valuesChain }] }
const leafNodes = [] for (const child of node.children) { leafNodes.push(...traverse(child, valuesChain, labelChain)) } return leafNodes }
let result = [] treeData.forEach((node) => { result.push(...traverse(node)) }) return result }
let allData = getLeafNodes(data)
let result = [] allData.forEach((obj) => { if (obj.label.includes(targetLabel)) { result.push(obj) } }) return result }
console.log("result: ", filterByLabel(sourceData, "环境")) console.log("result: ", filterByLabel(sourceData, "管理"))
|