Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

search an item in multidimentionnal array

I’m trying to find an element on a multidimentionnal array usin JAVASCRIPT function, but I get error

This is my array’s data:

export const datas = [
    {
        id: 1,
        firstName: 'John',
        tables: [
            { ID: 11, title: 'Lorem' },
            { ID: 12, title: 'Ipsum' },
        ],
    },
    {
        id: 2,
        firstName: 'Doe',
        tables: [
            {
                ID: 22,
                title: 'Arke',
                nodes: [{ name: 'Name1' }, { name: 'Name2' }, { name: 'Name3' }],
            },
            { ID: 23, title: 'Korem' },
        ],
    },
    {
        id: 3,
        firstName: 'Brad',
        tables: [
            {
                ID: 30,
                title: 'Mern',
                nodes: [{ name: 'Name4' }, { name: 'Name5' }, { name: 'Name6' }],
            },
            {
                ID: 31,
                title: 'Full',
                nodes: [{ name: 'Name7' }, { name: 'Name8' }, { name: 'Name9' }],
            },
        ],
    },
];

I’ve tried a reccursive function but it’s not work, this is my code :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

export const findById = (arr, id) => {
    for (let o of arr) {
        if (o.tables.length > 0) {
            let a = findById(o.tables.nodes, 'id');
            console.log(a);
        }
    }
};

I want to print the Object with ID 22, the problem is that I don’t have the same structure in each dimension, and it still confuse me..

My Input : 22

My output :

{
    ID: 22,
    title: 'Arke',
    nodes: [{ name: 'Name1' }, { name: 'Name2' }, { name: 'Name3' }],
},

Have you an idea how to edit my function to get my input’s response ?

>Solution :

Your recursive function wasn’t too far off, you need to check if the item as a tables first before recursively calling it again. And then finally just check the ID in the loop.

eg..

const datas=[{id:1,firstName:"John",tables:[{ID:11,title:"Lorem"},{ID:12,title:"Ipsum"}]},{id:2,firstName:"Doe",tables:[{ID:22,title:"Arke",nodes:[{name:"Name1"},{name:"Name2"},{name:"Name3"}]},{ID:23,title:"Korem"}]},{id:3,firstName:"Brad",tables:[{ID:30,title:"Mern",nodes:[{name:"Name4"},{name:"Name5"},{name:"Name6"}]},{ID:31,title:"Full",nodes:[{name:"Name7"},{name:"Name8"},{name:"Name9"}]}]}];


function findById(arr, ID) {
  for (const a of arr) {
    if (a.tables) {
      const r = findById(a.tables, ID);
      if (r) return r;
    }
    if (a.ID === ID) return a;
  }
}

console.log(findById(datas, 22));
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading