
وقد قمت مؤخرًا بتطوير وحدة إدارة الأذونات لنظام إدارة الواجهة الخلفية، والتي تتضمن منطق معالجة البيانات لمختلف الهياكل الشجرية، مثل: الإضافة والحذف. والتعديل والاستعلام وما إلى ذلك؛ مقارنة ببيانات بنية المصفوفة العادية، فإن معالجة بنية الشجرة ليست بديهية مثل المصفوفة، ولكنها تتطلب خطوة أخرى - بحث متكرر لإجراء اجتياز عميق للبيانات هنا، سيلخص المدون أيضًا عملية التطوير، وسأشارك الطريقة التي توصلت إليها، وستمنحك هذه المقالة فهمًا شاملاً لمعالجة بيانات بنية شجرة JS:

مثال على بنية البيانات
دع البيانات = [{
المعرف: 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=> {
إذا (ele.id === معرف) {
ele.children ?ele.children.push(obj): ele.children = [obj]
} آخر {
إذا (ele.children) {
appendNodeInTree(id, ele.children, obj)
}
}
})
شجرة العودة
} ابحث عن العقدة المحددة في بنية الشجرة واحذف العقدة، الكود كما يلي
const RemoveNodeInTree=(treeList, id)=> { // إزالة العناصر من المصفوفة (بنية الشجرة) حسب المعرف if (!treeList || ! TreeList.length) {
يعود
}
for (let i = 0; i <treeList.length; i++) {
إذا (treeList[i].id === معرف) {
TreeList.splice(i, 1);
استراحة؛
}
RemoveNodeInTree(treeList[i].children, id)
}
} للبحث بشكل متكرر وتعديل حالة العقدة، ويكون الرمز كما يلي:
const updateNodeInTree=(treeList,id, obj)=> {
إذا (!treeList || !treeList.length) {
يعود؛
}
for (let i = 0; i <treeList.length; i++) {
إذا (treeList[i].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]. الأطفال) {
findNodeInTree (بيانات [i]. children، مفتاح، رد اتصال)
}
}
}
// طريقة تخزين العقدة التي تم العثور عليها Let Obj={}
findNodeInTree(data, key, (item, Index, arr) => {
Obj = العنصر
})
// هذه هي العقدة التي سيتم العثور عليها المقابلة لـ Obj console.log(Obj)