JSFiddle - React, Tailwind, and code Playground
HTML
<div id="newArray"></div>
JavaScript
var items = [
{id:1, parentId:0, name:'item1'},
{id:2, parentId:1, name:'item1.2'},
{id:3, parentId:1, name:'item1.3'},
{id:4, parentId:3, name:'item3.4'},
{id:5, parentId:3, name:'item3.5'}
];
var myObj = function(id, parentId, name, children){
this.id = id;
this.parentId = parentId;
this.name = name;
this.children = children;
};
function transform(itms){
var resultArray=[];
var parentsById={};//this acts as a dictionary for storing the myObj parents for adding children after.
for(var i=0;i<itms.length;i++){
var item=itms[i];
var transformedItem=new myObj(item.id,item.parentId,item.name,[]);
parentsById[item.id]=transformedItem;
if(parentsById[item.parentId])
{
parentsById[item.parentId].children.push(transformedItem);
}else
{
resultArray.push(transformedItem);
}
}
return resultArray;
}
var newItems=[];
$(document).ready(function(){
newItems=transform(items);
var newArrayStr= JSON.stringify(newItems);
$("#newArray").text(newArrayStr);
});