【问题标题】:Last item of ForEach comes undefinedForEach 的最后一项未定义
【发布时间】:2016-08-17 13:04:40
【问题描述】:

这是我的代码:

useraccountprofileJSON.providerprofile.openinginfo.forEach(function(instance_1){
                                    instance_1.openingdetail.openingapplication.forEach(function(instance_2){
                                        console.log(instance_2);
                                        if(instance_2.oaid == oaid){
                                            isowner = true;
                                        }
                                    });
                                }); 

当我执行此操作时,我收到以下错误:

[TypeError: Cannot read property 'openingapplication' of undefined]

错误是因为最后一项(即最后一个开头的细节)在 forEach 迭代中未定义。

如何解决这个问题?

【问题讨论】:

  • 不在您的数组中包含undefined(最佳解决方案),或者直接使用if(instance1){ ... }进行检查
  • undefined 不在我的任何价值观中!
  • 但是forEach 也不是编造的。它必须在那里。您能否展示 JSON 以及可能的 JSON 的输入/输出?
  • 首先console.log() 你的instance_1 是否获得openingdetail 属性。你得到这个未定义的 openingdetail 密钥在你的 instance_1 中不可用。
  • @AjitejKaushik 是的,instance_1 中的最后一项没有让我打开详细信息。这就是我的观点。为什么即使它存在于数据库中也不显示给我。它只发生在最后一项。

标签: javascript node.js loops express strongloop


【解决方案1】:

您可以通过替换来解决此问题:

instance_1.openingdetail.openingapplication.forEach

与:

instance_1.openingdetail && instance_1.openingdetail.openingapplication.forEach

备注

如果您的代码的目的只是设置isowner 值,那么您可以使用some,它会在找到一个oid 匹配后立即退出:

isowner = useraccountprofileJSON.providerprofile.openinginfo.some(function(instance_1){
    return instance_1.openingdetail && 
           instance_1.openingdetail.openingapplication.some(function(instance_2){
        return instance_2.oaid == oaid;
    });
}); 

【讨论】:

    猜你喜欢
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2020-02-10
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多