24

I have some data that is in JSON object array. I'm trying to use nested forEach loops to extract the data.

The data is modeled like belo. There's multiple dataModels and multiple childNodes inside the dataModels.

//this is what an example data looks like
dataModels[0].childNodes[0].appId

I am trying to do something like the following:

dataModels.forEach(function(entry){
    entry.forEach(function(childrenEntry){
      console.log(childrenEntry.appId);
    })
})

The above however does not work and it gives me an error saying that 'entry' is not a function. Is there a better way to achieve what I'm trying to do?

1
  • 2
    entry.childNodes.forEach maybe? And you have a typo in function(childrenEntry{ Commented May 11, 2015 at 20:01

3 Answers 3

15

You are not targeting the array inside the entry object, you need to loop over the childNodes property in order to get the data you want. See example below.

var dataModels = [];

dataModels[0] = {
    childNodes: []
};

dataModels[0].childNodes[0] = {
    appId: "foo"
};

dataModels.forEach(function(entry){ 
    entry.childNodes.forEach(function(childrenEntry) { // was missing a )
      console.log(childrenEntry.appId);
    });
});

JsFiddle demo

Sign up to request clarification or add additional context in comments.

Comments

8

Nesting foreach is really a bad practice. Instead of that you can use the map() function to get data.

Suppose a array of object be like this & now here how to use map instead of multiple foreach();

data = [{
    dataModels: [{
        childNodes: {
            appId: 'foo'
        }
    }]
}];


data.forEach(function(obj) {
    var res = obj.dataModels.map(function(o) {
        return o.childNodes;
    });
    console.log(res[0]);
});

1 Comment

Is there any difference between the map and foreach in performance? or why is it a bad practice?
2

It appears to me that your solution is correct, but you're missing a parentheses and you're not referencing the childNodes attribute:

data.forEach(function(entry){
    entry.childNodes.forEach(function(childrenEntry){
      console.log(childrenEntry.appId);
    })
})

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.