हमारे पास एक ही सरणी में एक-से-अनेक संबंधों वाला डेटा है। संगठन लेवल द्वारा स्थापित है। एक तत्व का पैरेंट हमेशा उससे एक लेवल ऊपर होता है और parentId द्वारा संदर्भित होता है।
हमें इस सरणी से एक बहु-स्तरीय सरणी प्राप्त करना आवश्यक है। उच्चतम लेवल वाले तत्व मुख्य सरणी होंगे, जिनके बच्चे उप-सरणी के रूप में होंगे।
यदि इनपुट सरणी दी गई है −
const arr = [ { _id: 100, level: 3, parentId: null, }, { _id: 101, level: 2, parentId: 100, }, { _id: 102, level: 2, parentId: 100, }, { _id: 103, level: 2, parentId: 100, }, { _id: 104, level: 1, parentId: 101, }, { _id: 105, level: 1, parentId: 102, }, { _id: 106, level: 1, parentId: 101, }, { _id: 107, level: 1, parentId: 103, }, { _id: 108, level: 1, parentId: 102, }, { _id: 109, level: 1, parentId: 103, } ];तो आउटपुट संरचना कुछ इस तरह होनी चाहिए −
100 | ------------------------------------ | | | 101 102 103 ------- ------ ------ | | | | | | 104 106 105 108 107 109
उदाहरण
इसके लिए कोड होगा −
const arr = [{ _id: 100, level: 3, parentId: null, }, { _id: 101, level: 2, parentId: 100, }, { _id: 102, level: 2, parentId: 100, }, { _id: 103, level: 2, parentId: 100, }, { _id: 104, level: 1, parentId: 101, }, { _id: 105, level: 1, parentId: 102, }, { _id: 106, level: 1, parentId: 101, }, { _id: 107, level: 1, parentId: 103, }, { _id: 108, level: 1, parentId: 102, }, { _id: 109, level: 1, parentId: 103, }]; const prepareTree = (arr = [], root = null) => { let res; const obj = Object.create(null); arr.forEach(el => { el.children = obj[el._id] && obj[el._id].children; obj[el._id] = el; if (el.parentId === root) { res = el; } else { obj[el.parentId] = obj[el.parentId] || {}; obj[el.parentId].children = obj[el.parentId].children || []; obj[el.parentId].children.push(el); } }); return res; }; console.log(JSON.stringify(prepareTree(arr), undefined, 4));आउटपुट
और कंसोल में आउटपुट होगा −
{ "_id": 100, "level": 3, "parentId": null, "children": [ { "_id": 101, "level": 2, "parentId": 100, "children": [ { "_id": 104, "level": 1, "parentId": 101 }, { "_id": 106, "level": 1, "parentId": 101 } ] }, { "_id": 102, "level": 2, "parentId": 100, "children": [ { "_id": 105, "level": 1, "parentId": 102 }, { "_id": 108, "level": 1, "parentId": 102 } ] }, { "_id": 103, "level": 2, "parentId": 100, "children": [ { "_id": 107, "level": 1, "parentId": 103 }, { "_id": 109, "level": 1, "parentId": 103 } ] } ] }