嵌套的forEach循环不起作用

use*_*130 7 javascript

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

数据的建模类似于belo.dataModels中有多个dataModel和多个childNodes.

//this is what an example data looks like
dataModels[0].childNodes[0].appId
Run Code Online (Sandbox Code Playgroud)

我想尝试做以下事情:

dataModels.forEach(function(entry){
    entry.forEach(function(childrenEntry){
      console.log(childrenEntry.appId);
    })
})
Run Code Online (Sandbox Code Playgroud)

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

Gil*_*esC 10

您不是针对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);
    });
});
Run Code Online (Sandbox Code Playgroud)

JsFiddle 演示


小智 7

嵌套 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]);
});
Run Code Online (Sandbox Code Playgroud)

  • map和foreach在性能上有什么区别吗?或者为什么这是一个不好的做法? (4认同)