1

My nested json array looks like:

 [
      {
        id: 1,
        name: "Mike",
        children: [
          { id: 2, name: "MikeC1" },
          { id: 3, name: "MikeC2" },
          {
            id: 4, name: "MikeC3",
            children: [{ id: 5, name: "MikeCC1" }]
          },
        ]
      },
      {
        id: 6,
        name: "Json",
        children: [
          { id: 7, name: "JsonC1" },
          { id: 8, name: "JsonC2" },
          {
            id: 9, name: "JsonC3",
            children: [{ id: 10, name: "JsonCC1" },{ id: 11, name: "JsonCC2" }]
          },
        ]
      }
    ]

Now I get a id like "11"

then get the parent ids array in json like [6,9,11]

How to do?

var id = 11
console.log(findParent(id))
//result is [6,9,11]
jansma
  • 1,605
  • 1
  • 15
  • 22
  • 3
    This isn't json. None of the keys are in quotes, and there are a lot of commas on the last items in objects and arrays. – Charlie Bamford Jun 18 '21 at 11:30
  • 1
    [What is the difference between JSON and Object Literal Notation?](https://stackoverflow.com/questions/2904131/what-is-the-difference-between-json-and-object-literal-notation) –  Jun 18 '21 at 11:32

1 Answers1

2

You need to do recursive search

 const persons = [
      {
        id: 1,
        name: "Mike",
        children: [
          { id: 2, name: "MikeC1" },
          { id: 3, name: "MikeC2" },
          {
            id: 4, name: "MikeC3",
            children: [{ id: 5, name: "MikeCC1" }]
          },
        ]
      },
      {
        id: 6,
        name: "Json",
        children: [
          { id: 7, name: "JsonC1" },
          { id: 8, name: "JsonC2" },
          {
            id: 9, name: "JsonC3",
            children: [{ id: 10, name: "JsonCC1" },{ id: 11, name: "JsonCC2" }]
          },
        ]
      }
    ];
    
    function searchRecursive(items, id) {
      const allIds = [];
      
      items.forEach(item => {
        if(item.id === id) {
          allIds.push(item.id);
        }
        else if(item.children) {
          const ids = searchRecursive(item.children, id);
          
          if(ids.length) allIds.push(item.id);
          
          ids.forEach(id => allIds.push(id));
        }
      });
      
      return allIds;
    }
    
    console.log(searchRecursive(persons, 11));
AidOnline01
  • 712
  • 7
  • 19