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'));