Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Javascript

जावास्क्रिप्ट में पेड़ के लिए वस्तुओं की फ्लैट सरणी

<घंटा/>

मान लीजिए, हमारे पास इस तरह की वस्तुओं की एक सरणी है -

const arr = [
   { id: '1', name: 'name 1', parentId: null },
   { id: '2', name: 'name 2', parentId: null },
   { id: '2_1', name: 'name 2_1', parentId: '2' },
   { id: '2_2', name: 'name 2_2', parentId: '2' },
   { id: '3', name: 'name 3', parentId: null },
   { id: '4', name: 'name 4', parentId: null },
   { id: '5', name: 'name 5', parentId: null },
   { id: '6', name: 'name 6', parentId: null },
   { id: '7', name: 'name 7', parentId: null },
   { id: '1_1', name: 'name 1_1', parentId: '1' },
   { id: '1_2', name: 'name 1_2', parentId: '1' },
   { id: '1_3', name: 'name 1_3', parentId: '1' },
   { id: '1_4', name: 'name 1_4', parentId: '1' },
   { id: '1_5', name: 'name 1_5', parentId: '1' },
   { id: '2_1_1', name: 'name 2_1_1', parentId: '2_1' },
   { id: '2_1_2', name: 'name 2_1_2', parentId: '2_1' },
   { id: '2_1_3', name: 'name 2_1_3', parentId: '2_1' },
   { id: '2_1_4', name: 'name 2_1_4', parentId: '2_1' },
   { id: '2_1_5', name: 'name 2_1_5', parentId: '2_1' },
];

हमें एक जावास्क्रिप्ट फ़ंक्शन लिखना आवश्यक है जो वस्तुओं की एक ऐसी सरणी लेता है। इसके बाद फंक्शन को इस सरणी के आधार पर एक ट्री डेटा संरचना का निर्माण करना चाहिए जो बच्चों को उनकी मूल वस्तु से जोड़ती है और परिणाम को नेस्टेड सूची प्रारूप में स्क्रीन पर प्रदर्शित करती है।

उदाहरण

इसके लिए कोड होगा -

एचटीएमएल कोड -

<html>
   <head></head>
   <body>
      <div id = "tree">
      </div>
   </body>
</html>

जावास्क्रिप्ट कोड -

const arr = [
   { id: '1', name: 'name 1', parentId: null },
   { id: '2', name: 'name 2', parentId: null },
   { id: '2_1', name: 'name 2_1', parentId: '2' },
   { id: '2_2', name: 'name 2_2', parentId: '2' },
   { id: '3', name: 'name 3', parentId: null },
   { id: '4', name: 'name 4', parentId: null },
   { id: '5', name: 'name 5', parentId: null },
   { id: '6', name: 'name 6', parentId: null },
   { id: '7', name: 'name 7', parentId: null },
   { id: '1_1', name: 'name 1_1', parentId: '1' },
   { id: '1_2', name: 'name 1_2', parentId: '1' },
   { id: '1_3', name: 'name 1_3', parentId: '1' },
   { id: '1_4', name: 'name 1_4', parentId: '1' },
   { id: '1_5', name: 'name 1_5', parentId: '1' },
   { id: '2_1_1', name: 'name 2_1_1', parentId: '2_1' },
   { id: '2_1_2', name: 'name 2_1_2', parentId: '2_1' },
   { id: '2_1_3', name: 'name 2_1_3', parentId: '2_1' },
   { id: '2_1_4', name: 'name 2_1_4', parentId: '2_1' },
   { id: '2_1_5', name: 'name 2_1_5', parentId: '2_1' },
]
const tree = document.getElementById("tree")
arr.forEach(a => {
   const div = document.createElement("div")
   if (a.parentId === null) {
      div.classList.add("parent")
      div.setAttribute("id", `id${a.id}`)
      div.innerText = a.name
      tree.appendChild(div)
   }
   else {
      const parent = document.getElementById(`id${a.parentId}`)
      if (!parent.classList.contains("parent")) {
         parent.classList.add("parent")
      }
      console.log(`${a.id} `, parent)
      let childContainer = null
      if (parent.childElementCount === 0) {
         childContainer = document.createElement("div")
         childContainer.classList.add("childContainer")
         parent.appendChild(childContainer)
         childContainer.classList.add("hidden")
      }
      else {
         childContainer = document.querySelector(`#id${a.parentId}
         .childContainer`)
      }
      div.classList.add("child")
      div.setAttribute("id", `id${a.id}`)
      div.innerText = a.name
      childContainer.appendChild(div)
   }
})
const parents =
Array.from(document.getElementsByClassName("parent")).filter(p =>
p.childElementCount !== 0)
parents.forEach(p => {
   p.addEventListener("click", function(e) {
      e.preventDefault()
      const container = this.getElementsByClassName("childContainer")[0]
      container.classList.toggle("visible")
      e.stopPropagation()
   })
})

सीएसएस कोड -

.parent, .child {
   cursor: pointer;
}
.parent {
   margin: 10px 0;
   font-size: 1.3rem;
}
.parent::before {
   content: "\25BA";
   margin-right: 10px;
}
.childContainer {
   margin-left: 20px;
   display: none;
}
.childContainer.visible {
   display: block;
}
.child {
   font-size: 1rem;
}
.child::before {
   content: "\25BA";
}

और स्क्रीन पर आउटपुट होगा -

जावास्क्रिप्ट में पेड़ के लिए वस्तुओं की फ्लैट सरणी


  1. जावास्क्रिप्ट में आईडी द्वारा वस्तुओं की सरणी कैसे समूहित करें?

    जावास्क्रिप्ट में आईडी के आधार पर वस्तुओं के समूह के लिए कोड निम्नलिखित है - उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <titl

  1. जावास्क्रिप्ट वस्तुओं की सरणी पर सरणी के तरीकों का उपयोग करना?

    जावास्क्रिप्ट ऑब्जेक्ट्स की सरणी पर सरणी के तरीकों का उपयोग करने के लिए कोड निम्नलिखित है - उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"

  1. जावास्क्रिप्ट में ऑब्जेक्ट प्रॉपर्टी नाम की सरणी को बदलना

    जावास्क्रिप्ट में ऑब्जेक्ट प्रॉपर्टी नाम की सरणी को बदलने के लिए निम्नलिखित कोड है - उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />