jquery javascript阻止在嵌套数组迭代中计算未定义的对象

jquery javascript阻止在嵌套数组迭代中计算未定义的对象,javascript,jquery,undefined,loops,multidimensional-array,Javascript,Jquery,Undefined,Loops,Multidimensional Array,我有一个数组,一些内部数组还有另一个嵌套数组。有些没有。我循环遍历顶级数组元素,如果有内部数组,我循环遍历它们。如果没有,我也没有。我想大概是这样 由于某种原因,当我的迭代发现一个没有嵌套数组的数组时,我的控制台显示“type error”未定义。。。这在技术上是正确的,因为没有定义嵌套数组。然而,我认为我的嵌套if语句不允许对此进行回避。有什么想法吗 例如,动画[0][3]是数组,但动画[1][3]未定义。所以在if循环中,我有一个嵌套的 var a = animations.shift();

我有一个数组,一些内部数组还有另一个嵌套数组。有些没有。我循环遍历顶级数组元素,如果有内部数组,我循环遍历它们。如果没有,我也没有。我想大概是这样

由于某种原因,当我的迭代发现一个没有嵌套数组的数组时,我的控制台显示“type error”未定义。。。这在技术上是正确的,因为没有定义嵌套数组。然而,我认为我的嵌套if语句不允许对此进行回避。有什么想法吗

例如,动画[0][3]是数组,但动画[1][3]未定义。所以在if循环中,我有一个嵌套的

var a = animations.shift();

if ( a[3] )
{
  console.log( 'a[3] is: ' + a[3] )
}
else
{
  return;
}
我的理解是,如果[3]存在,则将其记录到控制台,如果不在不打印到控制台的情况下退出。。。然而,我的控制台继续产生一个未定义的求值。这是因为简单地测试它的存在性会返回一个未定义的错误吗?如何防止每次遇到没有嵌套数组的数组时出现此错误

谢谢

var animations = [
    ['.pcba','fadeIn', [1000], [
        ['.pcb_cad', 'fadeIn', [1000] ]
        ]
     ],
    ['.pcba', 'delay', [2000] ],
    ['.pcba','fadeOut', [1000], [
        ['.heatGenComps', 'fadeIn', [1000] ],
        ['.arrows', 'fadeIn', [1000] ]
        ]
    ],
    ['.heatGenComps', 'delay', [2000] ],
    ['.heatGenComps', 'fadeOut', [1000], [
        ['.arrows', 'fadeOut', [1000] ],
        ['.pcb_cad_cfd', 'fadeIn', [1000] ],
        ['.wePredOpTemps', 'fadeIn', [1000] ]
        ]
    ],

 ]; 
然后我重复了一遍,就像:

iter();
function iter(){

if (!animating) return;

 var a = animations.shift();

if (a) {
     var el = a[0];
     var fn = a[1];
     var args = a[2];

     $.fn[ a[1] ].apply( $( a[0] ), a[2] ).promise().done(iter);
     if ( a[3] )
     {
        var secondary = a[3];
        console.log( 'a[3] is: ' + a[3] );
        secondaryAnime();
        function secondaryAnime(){
            b = secondary.shift();
            console.log('secondary is: ' + b );
            $.fn[ b[1] ].apply( $( b[0] ), b[2] );
            secondaryAnime();
         };

     }
     else
     {
        return;
     }


}
else
{

}

};

异常的原因是如何迭代嵌套数组b。停止获取secondary.shift()时没有结束条件

在分配secondary.shift()之后,使用测试“if(b){…}”,就可以了


顺便说一句:您不需要写入所有空的“else”块。

异常的原因是如何迭代嵌套数组b。停止获取secondary.shift()时没有结束条件

在分配secondary.shift()之后,使用测试“if(b){…}”,就可以了


顺便说一句:您不需要编写所有空的“else”块。

事实上,对于一个简单的动画链,您有很多代码。 您所要做的就是在每个步骤中同时制作一些动画

你听说那家公司了吗?它允许在几乎没有代码的情况下连接任何异步内容。我将给出与您的动画链完全相同的完整代码,使用相同的计时,以jquery计时风格编写:

$('.pcb_cad').fadeIn(1000)
    .$('.pcba').fadeIn(1000,$).wait(2000).fadeOut(1000)
    .$('.heatGenComps, .arrows').fadeIn(1000,$).wait(2000).fadeOut(1000)
    .$('.pcb_cad_cfd, .wePredOpTemps').fadeIn(1000);
正如您所看到的,它只是一个很长的jQuery链

这里只需要该插件中的两种计时方法。 首先,您可以在任何时候使用方法链中的以下jQuery命令编写.fadeIn(…,$),以等待完成淡入淡出动画。 method.wait(timeout)将在给定的超时后继续方法链中的以下所有方法


这个插件有很多更直观的方法来延迟和连接你的动作。

事实上,你有很多简单动画链的代码。 您所要做的就是在每个步骤中同时制作一些动画

你听说那家公司了吗?它允许在几乎没有代码的情况下连接任何异步内容。我将给出与您的动画链完全相同的完整代码,使用相同的计时,以jquery计时风格编写:

$('.pcb_cad').fadeIn(1000)
    .$('.pcba').fadeIn(1000,$).wait(2000).fadeOut(1000)
    .$('.heatGenComps, .arrows').fadeIn(1000,$).wait(2000).fadeOut(1000)
    .$('.pcb_cad_cfd, .wePredOpTemps').fadeIn(1000);
正如您所看到的,它只是一个很长的jQuery链

这里只需要该插件中的两种计时方法。 首先,您可以在任何时候使用方法链中的以下jQuery命令编写.fadeIn(…,$),以等待完成淡入淡出动画。 method.wait(timeout)将在给定的超时后继续方法链中的以下所有方法


这个插件有很多更直观的方法来延迟和连接你的动作。

if(typeof(a[3])!='undefined'){错误仍然出现吗?'if(typeof(a[3])!='undefined')'这也没有做…'if(typeof(a[3])!='undefined')对我来说似乎很好->?if(typeof(a[3])!='undefined')){仍然显示错误?'if(typeof(a[3])!='undefined')这也没有做到…'if(typeof(a[3])!='undefined'))“对我来说似乎很好->一旦我有时间重构,我会尝试使用该插件;现有解决方案暂时有效。谢谢一旦我有时间重构,我会尝试使用该插件;现有解决方案暂时有效。谢谢