嵌套的forEach循环不起作用

时间:2015-05-11 20:00:36

标签: javascript

我有一些JSON对象数组中的数据。我正在尝试使用嵌套的forEach循环来提取数据。

数据的建模方式与belo相同。 dataModels中有多个dataModel和多个childNodes。

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

我正在尝试执行以下操作:

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

但是上面不起作用,它给我一个错误,说“入口”不是一个功能。有没有更好的方法来实现我想要做的事情?

3 个答案:

答案 0 :(得分:3)

您没有定位entry对象内的数组,您需要遍历childNodes属性以获取所需的数据。见下面的例子。

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

答案 1 :(得分:3)

嵌套foreach实际上是一种不好的做法。而不是你可以使用map()函数来获取数据。

假设一个对象数组是这样的&现在这里如何使用map代替多个foreach();

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


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

答案 2 :(得分:0)

在我看来,您的解决方案是正确的,但您错过了一个括号并且您没有引用childNodes属性:

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