JSFiddle - React, Tailwind, and code Playground
by Slava Slava
JavaScript
let data = [
{
name: 'item 1',
id: 1,
children: [
{
name: 'child 1 item 1',
id: 2,
},
{
name: 'child 1 item 2',
id: 3,
},
{
name: 'child 1 item 3',
id: 4,
children: [
{
name: 'child 1 child 3 item 1',
id: 5,
},
{
name: 'child 1 child 3 item 2',
id: 6,
},
{
name: 'child 1 child 3 item 3',
id: 7,
children: [
{
name: 'child child child item 1',
id: 8,
},
{
name: 'child child child item 1',
id: 9,
},
]
}
]
}
]
},
{
name: 'items 2',
id: 90,
children: [
{ name: 'items 3', id: 91 },
{ name: 'items 4', id: 92 }
]
}
];
function findInArray(arr, fn) {
var res;
arr.some((item, i) => {
var r = fn(item, i);
if(r) {
res = r;
return true;
}
});
return res;
}
function find(arr, id) {
return findInArray(arr, (item, i) => {
if(item.id == id) {
return [i];
} else if(item.children) {
var cur = find(item.children, id);
if(cur) return [i].concat(cur);
}
});
}
console.log('data' + find(data, 5).map(i => `[${i}]`).join('.children'));
// console.log('data' + find(data, 5).map(i => `[${i}]`).join('.children'));