Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

119
Views
How to loop over an array of nested objects

I'm facing a conundrum where I have to loop over an array of nested objects (object of objects) that could have other objects and arrays. That is, the array has objects that could have other objects with arrays of objects and so on.

The data structure is for a list (like a to-do list) that could have another list and that other list could have another list and so on:

 [
      "Buy milk",
      { //<----------------- item 2 is is an object that represents sub-items

        itemName: "Buy Meat", //<------------ name of item 2 on list
        subList: [ //<------ sub-items with an item of items
          "Beef", 
          {
            itemName: "Fish",
            subList: ["Tilapia", "Catfish", "Monkfish", "Halibut"]
          } ,
          "Chicken",
        ],
      },
      "Buy cooking oil",
      "Buy baking soda",
      { //<------------------- item 6 is an object that represents sub-items (sub-todo)
        itemName: "Buy Vegetable", //<------------ name of item 6 on list
        itemList: ["Cabbage", "Carrot", "Tomatoe", "Lettuce"] //<------ sub-items
      },
      "Buy bread"
    ]

How do I loop over a data structure like this? Also, is there a better way to represent such a list?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

You are asking two questions: first the structure,

The structure of the nested object should be consistent, so the question is how can you create a nested object where parents and child have the same structure.

It is not necessary to store the object in the same way as you view it in screen.

class MyList {
  constructor(itemName, subList) {
    this.itemName = itemName;
    this.subList = subList; // is always of Type MyList []
  }
}

With this structure, if SubList is not defined, its a simple string.

class MyList {
  constructor(itemName, subList) {
    this.itemName = itemName; // is name of list or individual item
    this.subList = subList; // is always of Type MyList [] or undefined
  }
}

let list = new MyList('Buy Meat', []); // ur sublist of buyMeat
list.subList.push(new MyList('beaf'));

let fishList = new MyList('fish', []); // sublist
fishList.subList.push(new MyList('Tilapia'));
fishList.subList.push(new MyList('Catfish'));
fishList.subList.push(new MyList('Monkfish'));
fishList.subList.push(new MyList('Halibut'));
list.subList.push(fishList);

list.subList.push(new MyList('chicken'));

console.log(list);
How to loop over, Now if you follow this structure you will notice that every MyList can be seen as a node. And you can use any tree traversal method to access all the elements. This can be done any way you want. The below example is just reading depth-first approach traversal of a tree.

class MyList {
  constructor(itemName, subList) {
    this.itemName = itemName; // is name of list or individual item
    this.subList = subList; // is always of Type MyList [] or undefined
  }
}

let list = new MyList('Buy Meat', []); // ur sublist of buyMeat
list.subList.push(new MyList('beaf'));

let fishList = new MyList('fish', []); // sublist
fishList.subList.push(new MyList('Tilapia'));
fishList.subList.push(new MyList('Catfish'));
fishList.subList.push(new MyList('Monkfish'));
fishList.subList.push(new MyList('Halibut'));
list.subList.push(fishList);

list.subList.push(new MyList('chicken'));

// Example reading all item name:
reader = (node) => node.subList ?  node.subList.map(reader).flat() : [node.itemName] 


console.log(reader(list))

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!