【问题标题】:Check for undefined array检查未定义的数组
【发布时间】:2015-04-26 21:21:06
【问题描述】:

我有一个多维数组“questArray”,其索引仅从 0 到 4。它的索引中的数据如下

questArray[0][0]['q_sec']=1
questArray[1][0]['q_sec']=2
questArray[2][0]['q_sec']=3
questArray[3][0]['q_sec']=4
questArray[4][0]['q_sec']=5

现在,我有一个循环 40 次的 for 循环。现在 在这个 for 循环中,我使用 if 块来检查 上述数组的某些条件如下:

for(var secCnt=1;secCnt<=5;secCnt++){
  for(var noCoun=0;noCoun<40;noCoun++){
     if (secCnt == questArray[noCoun][0]['q_sec']){
       //some code here
       alert('1');
     }
  }
}

我的问题是,在内部循环中,当“noCoun”计数器的值大于 4 时,代码不起作用,因为没有索引大于 4 的“questArray”。我如何检查这种情况。

我尝试了以下方法:

if (typeOf questArray[noCoun][0]['q_sec'] !== undefined){
         if (secCnt == questArray[noCoun][0]['q_sec']){
           //some code here
           alert('1');
         }
}

if (typeOf questArray[noCoun][0]['q_sec'] !== 'undefined'){
         if (secCnt == questArray[noCoun][0]['q_sec']){
           //some code here
           alert('1');
         }
}


if (questArray[noCoun][0]['q_sec'] !== 'null'){
         if (secCnt == questArray[noCoun][0]['q_sec']){
           //some code here
           alert('1');
         }
}

if (questArray[noCoun][0]['q_sec'] !== ''){
         if (secCnt == questArray[noCoun][0]['q_sec']){
           //some code here
           alert('1');
         }
}

但是上面的代码都不起作用。希望你能理解我的问题。请帮助。提前致谢

【问题讨论】:

  • 为什么不使用数组的.length 属性呢?
  • typeOf 不正确。它应该是typeof(没有大写字母)。 (MDN article on typeof)
  • 你试过if (questArray[noCoun] &amp;&amp; secCnt == questArray[noCoun][0]['q_sec'])
  • Zerkms 感谢 relpy.for 测试目的,当我使用 alert(questArray[5][0]['q_sec'].length);没有显示警报消息。但是当我使用 alert(questArray[4][0]['q_sec'].length); 时,会生成警报消息
  • mido22 当我使用 alert(typeof questArray[4][0]['q_sec']);它说“字符串”,但是当我使用 alert(typeof questArray[5][0]['q_sec']);没有提示信息

标签: javascript arrays multidimensional-array jagged-arrays


【解决方案1】:

我会这样做,

for(var secCnt=1;secCnt<=5;secCnt++){
  for(var noCoun=0;noCoun<40;noCoun++){
     if (questArray[noCoun] && secCnt == questArray[noCoun][0]['q_sec']){
       //some code here
       console.log('1');
     }
  }
}

基本上questArray[noCoun]检查它是否存在,然后才检查下一个条件,否则短路......

编辑:

为了真正安全,你也可以这样做

if (questArray && questArray[noCoun] && questArray[noCoun][0] && secCnt == questArray[noCoun][0]['q_sec']){

【讨论】:

    【解决方案2】:
    for(var secCnt=1;secCnt<=5;secCnt++){
      for(var noCoun=0;noCoun<40;noCoun++){
         if (noCoun < questArray.length && secCnt == questArray[noCoun][0]['q_sec']){
           //some code here
           alert('1');
         }
      }
    }
    

    【讨论】:

    • 当 noCoun=0 时,questArray[noCoun][0]['q_sec'] 将取值=1 当 noCoun=1 时,questArray[noCoun][0]['q_sec'] 将取值=2 当 noCoun=2 时,questArray[noCoun][0]['q_sec'] 将在 noCoun=3 时获取 value=3, questArray[noCoun][0]['q_sec'] 当 noCoun=4 时将获取 value=4 , questArray[noCoun][0]['q_sec'] 将获取 value=5 但我不明白下面的 if 循环将如何工作? if (noCoun
    • 如果 noCoun
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    相关资源
    最近更新 更多