JSFiddle - React, Tailwind, and code Playground
by shubham sharma
HTML
<button onclick="parseToArray()">parse</button>
<!-- <textarea id="parseit" rows="10" cols="50"></textarea> -->
<!-- <button onclick="myFunction()">data</button> -->
JavaScript
var final = [];
var working = {};
function parseToArray() {
var str = "- List item\r\n\t - list item 3\r\n\t\t - list item 4\r\n\t\t\t - list item 10\r\n\t\t\t\t - list item 11\r\n - list item 7\r\n\t - list item 8\r\n\t\t - list item 9\r\n\t\t\t - list item 12\r\n\t\t\t\t - list item 13\r\n\t\t\t\t\t - list item 14\r\n - list item 15\r\n\t - list item 16\r\n\t\t - list item 17\r\n\t\t\t - list item 18\r\n\t\t\t\t - list item 19\r\n\t\t\t\t\t - list item 20".trim();
var strAr = str.split("\r\n");
var strObj =[];
for(i in strAr) {
var tempStr = strAr[i];
var tempObj = {};
tempObj["level"] = (tempStr.match(/\t/g) || []).length;
tempObj["value"] = tempStr.replace(/\t/g,"").replace(/- /g, "").trim();
strObj.push(tempObj);
}
console.log(strObj);
addToJson(strObj);
console.log('final',final);
var taxonomies = final.map(function(v) {
return v.name.split("/");
});
console.log('taxonomies',taxonomies);
for (var i = 0; i < taxonomies.length; i++) {
addToHeirarchy(taxonomies[i], 1, working);
};
console.log(working,"json",JSON.stringify(working, null, 4));
var treeChilderen = {
"name" : "ROOT",
"children" : remapHeirarchy(working)
};
console.log(treeChilderen,"array",JSON.stringify(treeChilderen, null, 4));
};
function remapHeirarchy(item) {
var children = [];
for (var k in item) {
var obj = {
"name": k
};
var subData = remapHeirarchy(item[k]);
if(subData.length > 0) {
obj["children"] = remapHeirarchy(item[k]);
}
children.push(obj);
}
return children;
}
function addToHeirarchy(val, level, heirarchy) {
// console.log(val, level, heirarchy,val[level],val[level] && val[level] !== "");
if (val[level]) {
if (!heirarchy.hasOwnProperty(val[level])) {
heirarchy[val[level]] = {};
if(typeof val[level+1] == "undefined") {
heirarchy[val[level]] = 0;
}
}
addToHeirarchy(val, level + 1, heirarchy[val[level]]);
...