
เมื่อเร็วๆ นี้ ฉันได้พัฒนาโมดูลการจัดการสิทธิ์สำหรับระบบการจัดการแบ็กเอนด์ ซึ่งเกี่ยวข้องกับตรรกะการประมวลผลข้อมูลของโครงสร้างแผนผังต่างๆ เช่น การเพิ่ม การลบ การแก้ไข การสืบค้น ฯลฯ เมื่อเปรียบเทียบกับข้อมูลโครงสร้าง Array ทั่วไป การประมวลผลโครงสร้างต้นไม้นั้นไม่ซับซ้อนเท่ากับ Array แต่ก็ไม่ได้ซับซ้อนขนาดนั้น ที่นี่ บล็อกเกอร์จะสรุปกระบวนการพัฒนาที่ฉันจะแบ่งปันวิธีการที่ฉันคิดขึ้นมา บทความนี้จะช่วยให้คุณมีความเข้าใจอย่างถ่องแท้เกี่ยวกับการประมวลผลข้อมูลโครงสร้าง JS:

ตัวอย่างโครงสร้างข้อมูล
ให้ data = [{
รหัส: 1,
ป้ายกำกับ: 'ระดับ 1',
เด็ก: [{
รหัส: 4,
ป้ายกำกับ: 'ระดับ 1-1',
เด็ก: [{
รหัส: 9,
ป้ายกำกับ: 'ระดับ 3 1-1-1'
-
รหัส: 10,
ป้ายกำกับ: 'ระดับ 3 1-1-2'
-
-
-
รหัส: 2,
ป้ายกำกับ: 'ระดับ 2',
เด็ก: [{
รหัส: 5,
ป้ายกำกับ: 'ระดับ 2-1'
-
รหัส: 6,
ป้ายกำกับ: 'ระดับ 2-2'
-
-
รหัส: 3,
ป้ายกำกับ: 'ระดับ 3',
เด็ก: [{
รหัส: 7,
ป้ายกำกับ: 'ระดับ 2 3-1'
-
รหัส: 8,
ป้ายกำกับ: 'ระดับ 3-2'
-
}]; เพื่อค้นหาโหนดที่ระบุในโครงสร้างต้นไม้และเพิ่มโหนดลูกใหม่ รหัสจะเป็นดังนี้:
const appendNodeInTree = (id, tree, obj) => {
tree.forEach(เอเล=> {
ถ้า (ele.id === id) {
ele.children ? ele.children.push(obj) : ele.children = [obj]
} อื่น {
ถ้า (ele.children) {
ผนวก NodeInTree (id, ele.children, obj)
-
-
-
ต้นไม้กลับ
} ค้นหาโหนดที่ระบุในโครงสร้างต้นไม้และลบโหนด รหัสจะเป็นดังนี้
const removeNodeInTree=(treeList, id)=> { // ลบองค์ประกอบออกจากอาร์เรย์ (โครงสร้างต้นไม้) ด้วย id if (!treeList || ! treeList.length) {
กลับ
-
สำหรับ (ให้ i = 0; i < treeList.length; i++) {
ถ้า (treeList [i] .id === id) {
treeList.splice (i, 1);
หยุดพัก;
-
RemoveNodeInTree(treeList[i].children, id)
-
} เพื่อค้นหาและแก้ไขสถานะของโหนดแบบวนซ้ำ รหัสจะเป็นดังนี้:
const updateNodeInTree=(treeList,id, obj)=> {
ถ้า (!treeList || !treeList.length) {
กลับ;
-
สำหรับ (ให้ i = 0; i < treeList.length; i++) {
ถ้า (treeList [i] .id == id) {
treeList[i]= obj;
หยุดพัก;
-
updateNodeInTree(treeList[i].children,id,obj);
-
} แบบวนซ้ำเพื่อค้นหาโหนดในโหนดแผนผัง รหัส:
const findNodeInTree = (data, key, callback) => {
สำหรับ (ให้ i = 0; i < data.length; i++) {
ถ้า (ข้อมูล [i] .key == คีย์) {
โทรกลับ (ข้อมูล [i], i, ข้อมูล)
-
ถ้า (ข้อมูล [i] .children) {
findNodeInTree (data[i].children, คีย์, โทรกลับ)
-
-
-
//วิธีการจัดเก็บโหนดที่พบ ให้ Obj={}
findNodeInTree (ข้อมูล, คีย์, (รายการ, ดัชนี, arr) => {
Obj = รายการ
-
// นี่คือโหนดที่จะพบซึ่งสอดคล้องกับ Obj console.log(Obj)