I want to match id and parentId and get the new object
element can take more than one data and must be nested according to id matching
I couldn't find how to match and can I search the new list after converting?
is it possible to do such a dynamic function?
I will use this code in an angular project
First Array
[
{
id: '1',
parentId: 0,
name: 'x'
},
{
id: '2',
parentId: 1,
name: 'y'
},
{
id: '3',
parentId: 2,
name: 'z'
},
{
id: '4',
parentId: 2,
name: 'q'
},
{
id: '5',
parentId: 3,
name: 'e'
},
{
id: '6',
parentId: 5,
name: 'r'
}
]
new object
{
element: [
{
data: {
id: '1',
parentId: 0,
name: 'x'
},
element: [
{
data: {
id: '2',
parentId: 1,
name: 'y'
},
element: [
{
data: {
id: '3',
parentId: 2,
name: 'z'
},
element: [
{
data: {
id: '5',
parentId: 3,
name: 'e'
},
element: [
{
data: {
id: '6',
parentId: 5,
name: 'r'
},
element: [
]
}
]
}
]
},
{
data: {
id: '4',
parentId: 2,
name: 'q'
},
element: [
]
}
]
}
]
}
]
}
function transformToTree(arr){ var nodes = {}; return arr.filter(function(obj){ var id = obj["id"], parentId = obj["parentId"]; nodes[id] = _.defaults(obj, nodes[id], { element: [] }); parentId && (nodes[parentId] = (nodes[parentId] || { element: [] }))["element"].push(obj); return !parentId; }); }