嵌套的forEach循环不起作用

24

我有一个JSON对象数组的数据,我想使用嵌套的forEach循环来提取数据。

数据的模型如下所示。有多个数据模型和多个子节点在数据模型内部。

//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);
    })
})

然而,以上方法并不起作用,并给出了一个错误,指出'entry'不是一个函数。有没有更好的方法来实现我尝试做的事情?


2
entry.childNodes.forEach 可能是吗?并且 function(childrenEntry{ 中有一个打字错误。 - DontVoteMeDown
3个回答

14
您没有针对entry对象内部的数组进行操作,您需要循环遍历childNodes属性以获取所需数据。请参考以下示例。

您未针对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演示


8

嵌套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]);
});


11
在性能上,map和foreach有什么不同?为什么使用它们会是一种不好的实践? - Kevin Oswaldo

2

我认为你的解决方案是正确的,但是你缺少一个括号,并且没有引用childNodes属性:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接