【问题标题】:Looping Through Multidimensional Array with Nested Arrays使用嵌套数组循环遍历多维数组
【发布时间】:2016-05-20 11:25:43
【问题描述】:

我有简单的 JS(jquery) 代码,我想通过所有三个嵌套数组运行它。 现在它只执行第一个嵌套数组 ([16, 10, 11) 然后停止。 我读过“for”循环可能有效,但我尝试过但失败了:[

any1 有能力解决这个问题吗?我会很感激!

$(function(){ 
    var cat = [[16, 10, 11],[15, 10, 11],[36, 10, 11]];
    $('li#hcategory_' + cat[0][0] + ' ul.level2 > li:gt(' + cat[0][1] +')').hide();
      var l = $('li#hcategory_' + cat[0][0] + ' .level2 > li').length;
      if (l > cat[0][2]) {
          $('li#hcategory_' + cat[0][0] + 'span.show_more_button').show();
      } else {
          $('li#hcategory_' + cat[0][0] + 'span.show_more_button').hide();
      }
      $('li#hcategory_16 .show_more_button').click(function () {
        $('li#hcategory_' + cat[0][0] + ' ul.level2 > li:gt(' + cat[0][1] +')').show('slow');
    });
});

【问题讨论】:

    标签: javascript arrays multidimensional-array nested


    【解决方案1】:

    您可以使用Array#forEach() 进行迭代。

    forEach() 方法对每个数组元素执行一次提供的函数。

    $(function () {
        var cat = [[16, 10, 11], [15, 10, 11], [36, 10, 11]];
        cat.forEach(function (c) {
            $('li#hcategory_' + c[0] + ' ul.level2 > li:gt(' + c[1] + ')').hide();
            var l = $('li#hcategory_' + c[0] + ' .level2 > li').length;
            if (l > c[2]) {
                $('li#hcategory_' + c[0] + 'span.show_more_button').show();
            } else {
                $('li#hcategory_' + c[0] + 'span.show_more_button').hide();
            }
            $('li#hcategory_16 .show_more_button').click(function () {
                $('li#hcategory_' + c[0] + ' ul.level2 > li:gt(' + c[1] + ')').show('slow');
            });
        });
    });
    

    【讨论】:

    • 非常感谢!它工作得很好。我只需将第 10 行更改为: $('li#hcategory_' + c[0] + ' .show_more_button').click(function () { 这是我的错,因为我忘记从那里删除“16” :)
    【解决方案2】:

    您可以首先对主数组使用双嵌套forEach() 方法,然后对每个嵌套数组使用第二个方法,如下所示:

    var cat = [[16, 10, 11],[15, 10, 11],[36, 10, 11]];
    
     cat.forEach(function(v,i){
         //here v represents the values of the first level,
         //assuming it contains only arrays you can run a nested 
         console.log(v);
         v.forEach(function(vv, ii){
             // here you can access booth arrays respectively calling them
         console.log(v);
         conosole.log(vv);
         });
    });
    

    【讨论】:

      猜你喜欢
      • 2021-04-05
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      相关资源
      最近更新 更多