class QueryString {
static parse(input) {
const paires = input?.split('&');
const obj = paires.reduce((obj,str)=>{
const [key,value] = str?.split('=')
if(obj[key]===undefined){
obj[key]=value
return obj;
}
if(typeof value === 'string'){
obj[key]=[obj[key]]
obj[key].push(value)
}else{
obj[key].push(value)
}
return obj
},{})
}
}
const data = [
{ id: 4, parentId: 3, label: '4' },
{ id: 3, parentId: 1, label: '3' },
{ id: 2, parentId: 1, label: '2' },
{ id: 1, parentId: null, label: '1' },
];
convert2Tree(data);
function convert2Tree(data) {
let index=0;
const mapper = {}
let rootId
while(index<data.length){
const {parentId,id, label} = data[index]
if(mapper[parentId]===undefined && parentId!==undefined){
mapper[parentId]={
id:parentId,
children:[],
label:'',
parentId:undefined
}
}
if(mapper[id]===undefined){
const node = {
id,
label,
children:[],
parentId
}
mapper[id] = node
}else{
mapper[id].label = label
}
if(parentId!==undefined){
mapper[parentId].children.push(node)
}else{
rootId = id
}
index+=1
}
return mapper[rootId]
}