Last active
January 9, 2021 18:14
-
-
Save samilkahraman/712749f773e20c4ea727cdecca95ab4c to your computer and use it in GitHub Desktop.
data tree creation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const createDataTree = (dataset) => { // dataset - parentID ve id içeren objelerle dolu | |
const storehousesAsTree = []; // apinin geri döneceği array | |
let depth = 0; // başlangıç ağaç derinliğimiz | |
for (let i = 0; i < dataset.length; i += 1) { // bu döngünün amacı birden fazla root olma durumu içindir. Farklı ağaçlar oluşturmaktadır. | |
if (dataset[i].parentID === 0) { // Parent ID'si default 0 olanın parentı yok demektir ve Root kategoridir. | |
const parentID = dataset[i].id; | |
const tree = new Tree(); // Bulduğumuz elemanın root olduğu Treemizi oluşturuyoruz. | |
tree.add(dataset[i]); // add metodu tek parametre alırsa eklenen eleman root demektir. | |
const filteredDataSet = dataset.filter((el) => el.id !== parentID); // Bu filtreleme işlemi datasetten, ağaca eklediğimiz elemanı çıkarmak için | |
depth = findChilds(filteredDataSet, parentID, tree, 1); // ağacın rootunu yardımcı metodumuza gönderiyoruz ve o recursive olarak çocuklarını buluyor. | |
storehousesAsTree.push(tree); // tamamlandığında geri dönülecek arrayimize pushluyoruz ve diğer rootlar için bu işlem tekrarlanıyor | |
} | |
} | |
return { storehousesAsTree, depth }; | |
}; | |
const findChilds = (reducedDataSet, parentID, tree, depth) => { | |
if (reducedDataSet.length === 0) return; | |
// parentID'si seçilip, arrayden çıkarıldı ve kalan array içerisinde gezildi | |
for (let i = 0; i < reducedDataSet.length; i += 1) { | |
// Eğer azalan arrayda parent id'si gelen parent idye eşit varsa buraya girdi | |
if (reducedDataSet[i].parentID === parentID) { | |
// treede eşleşen parent child yerleştirilmesi yapıldı | |
tree.add(reducedDataSet[i], parentID); | |
// çocuk yeni parent seçildi çünkü çocuğun da çocuğu olabilir | |
const newParentID = reducedDataSet[i].id; | |
// çocuk arrayden çıkarıldı | |
const newreducedDataSet = reducedDataSet.filter( | |
(el) => el.id !== newParentID | |
); | |
findChilds(newreducedDataSet, newParentID, tree, depth); | |
// eslint-disable-next-line no-param-reassign | |
depth += 1; | |
} | |
} | |
// eslint-disable-next-line consistent-return | |
return depth; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment