সমস্যা বিবরণ
একটি ফ্ল্যাট অ্যারে দেওয়া আছে যেখানে প্রতিটি অবজেক্টে code এবং name প্রপার্টি আছে। code এর ফরম্যাট (যেমন "2", "2.2", "2.2.01.01") থেকে হায়ারার্কি বুঝা যায়। এই অ্যারেকে ট্রি স্ট্রাকচারে রূপান্তর করতে হবে।
সমাধান
const arr = [{
"code": "2",
"name": "PENDING"
}, {
"code": "2.2",
"name": "PENDING CHILDREN"
}, {
"code": "2.2.01.01",
"name": "PENDING CHILDREN CHILDREN"
}, {
"code": "2.2.01.02",
"name": "PENDING CHILDREN CHILDREN02"
}, {
"code": "1",
"name": "ACTIVE"
}, {
"code": "1.1",
"name": "ACTIVE CHILDREN"
}, {
"code": "1.1.01",
"name": "ACTIVE CHILDREN CHILDREN"
}];
const transformToTree = (arr, root = '') => {
let map = {}, last = [root], level = 0;
map[root] = {};
arr.forEach(el => {
let parent = root;
while (level && last[level].length >= el.code.length) {
level--;
}
parent = last[level];
level++;
last.length = level;
last.push(el.code);
map[el.code] = el;
map[parent].children = map[parent].children || [];
map[parent].children.push(el);
});
return map[root].children;
};
console.log(JSON.stringify(transformToTree(arr), undefined, 4));
আউটপুট
[
{
"code": "2",
"name": "PENDING",
"children": [
{
"code": "2.2",
"name": "PENDING CHILDREN",
"children": [
{ "code": "2.2.01.01", "name": "PENDING CHILDREN CHILDREN" },
{ "code": "2.2.01.02", "name": "PENDING CHILDREN CHILDREN02" }
]
}
]
},
{
"code": "1",
"name": "ACTIVE",
"children": [
{
"code": "1.1",
"name": "ACTIVE CHILDREN",
"children": [
{ "code": "1.1.01", "name": "ACTIVE CHILDREN CHILDREN" }
]
}
]
}
]
অ্যালগরিদম ব্যাখ্যা
mapঅবজেক্ট দিয়ে কোড অনুযায়ী নোড স্টোর করা হয়।lastঅ্যারে দিয়ে বর্তমান লেভেলের প্যারেন্ট ট্র্যাক করা হয়।codeলেন্থের ভিত্তিতে লেভেল বাড়ানো/কমানো হয়।- প্রতিটি নোডকে তার প্যারেন্টের
childrenঅ্যারেতে পুশ করা হয়।