【问题标题】:Nested forEach loop does not work嵌套的 forEach 循环不起作用
【发布时间】:2016-08-27 18:08:12
【问题描述】:

我有一些 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'不是一个函数。有没有更好的方法来实现我想要做的事情?

【问题讨论】:

  • entry.childNodes.forEach 也许?你在function(childrenEntry{中有一个错字

标签: javascript


【解决方案1】:

您的目标不是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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • map和foreach在性能上有区别吗?或者为什么这是一种不好的做法?
    【解决方案3】:

    在我看来,您的解决方案是正确的,但是您缺少括号并且您没有引用 childNodes 属性:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      • 2016-04-02
      相关资源
      最近更新 更多