JSFiddle - React, Tailwind, and code Playground
by Nalin Sajwan
JavaScript
var travereTreeUpdateIdLength = function(arrData, updateId, preIdText, idParentSeparator, updateLength, lengthKey) {
console.time("[travereTreeUpdateIdLength]");
if(updateId || updateLength) {
// Text code for comma <",">.
var parentSeparator = ",";
function traverse(arr, func, parent) {
var arrLength = arr.length;
for (var i = 0; i < arrLength; i ++) {
var nameKey = JSON.parse(JSON.stringify( arr[i].name ));
func.apply(this, [nameKey, arr[i], parent]);
if (typeof arr[i].children !== "undefined" && arr[i].children.length > 0) {
var innerParent = "";
if(typeof parent !== "undefined"
&& parent.trim() !== "") {
innerParent = parent + parentSeparator + nameKey;
} else {
innerParent = nameKey
}
traverse(arr[i].children, func, innerParent);
}
};
}
var text = "";
function countLastChildren(object) {
if(object.children) {
var return_val = 0;
object.children.forEach(function (el) {
return_val += countLastChildren(el);
});
return return_val;
} else {
return 1;
}
};
traverse(arrData, function(key, value, parent) {
// console.log("\nkey ==> ", key);
// console.log("\nvalue ==> ", value);
// console.log("\nparent ==> ", parent);
var taxoText = "";
var parent = (typeof parent !== "undefined" && parent.trim() !== "") ? parent: "";
var parentText = "";
if(parent.trim() !== "") {
parentText += idParentSeparator + parent.trim().split(parentSeparator).join(idParentSeparator);
}
taxoText = parentText + idParentSeparator + key;
if(updateId) {
value.id = preIdText + ("tree-" + taxoText).split(" ").join("").replace(/[^A-Za-z0-9_-]/g, "");
}
if(updateLength && typeof value.children !== "undefined") {
var sample = JSON.parse(JSON.stringify( value ));
var result = countLastChildren(sample);
if(typeof lengthKey !== "undefined") {
var userText = result>1?"...