代码之家  ›  专栏  ›  技术社区  ›  Trombone0904

向多维数组添加值

  •  0
  • Trombone0904  · 技术社区  · 7 年前

    var items = [ ["red", "blue"], ["green", "yellow"] ];
    console.log(items[1][1]); // green
    

    但是现在我想动态地填充这些值。 我试过这个:

    var items = [[]];
    $.each($("input[name='checkboxColors1']:checked"), function(){            
       items[0].push($(this).val());
    });
    
    $.each($("input[name='checkboxColors2']:checked"), function(){            
        items[1].push($(this).val());
    });
    

    项目[0]。推送。。。有效,但项目[1]无效

    TypeError:项[1]未定义

    我的错在哪里?

    6 回复  |  直到 7 年前
        1
  •  2
  •   Suxino    7 年前

    var items = [[]]; 你的问题在这里。

    项[0]是一个数组。但第[1]项未定义。 为了工作,您需要将项定义为 [[],[]]

        2
  •  2
  •   MarcoS    7 年前

    这样可以工作。。。但必须以以下方式初始化初始数组:

    var items = [ [], [] ];
    

    自从

    var items = [[]];
    

    您只能在外部数组中定义一个内部数组( items[0] ),但是你想要两个( 项目[0] , items[1] ).

        3
  •  1
  •   Yanick Frehner    7 年前

    不能推入未定义的数组,首先需要创建数组。

    您的代码必须如下所示:

    var items = [[], []];
    $.each($("input[name='checkboxColors1']:checked"), function(){            
       items[0].push($(this).val());
    });
    
    $.each($("input[name='checkboxColors2']:checked"), function(){            
        items[1].push($(this).val());
    });
    

    那么它应该能正常工作。

        4
  •  0
  •   Leandro Castro    7 年前

    此函数用于在数组的最后一个位置插入新元素。

    例如

    var items = ["grape"];
    items.push("apple"); 
    console.log(items); //["grape", "apple"].
    
        5
  •  0
  •   SINGH    7 年前

    最好的方法是创建一个数组对象并动态赋值。通过这种方式,您还可以定义字符串键。请参见下面的内容

    var items = new Array();
    
        items[0] = 1;
        items[1] = 2;
        console.log(items);
    //Uncomment above block to test.
    var items = new Array();
    var items0 = [];
    var items1 = [];
    $.each($("input[name='checkboxColors1']:checked"), function(){            
       items0 = $(this).val();
    });
    
    $.each($("input[name='checkboxColors2']:checked"), function(){            
        items1 = $(this).val();
    });
    items[0] = items0;
    items[1] = items1;
    
        6
  •  0
  •   Eyal c    7 年前

    当您将静态多维数组与使用push动态添加元素相结合时,请小心。

    var checkBoxGroupNames = ['checkboxColors1', 'checkboxColors2'];
    var items = [];
    
    var checkedChkBoxes = [];
    
    for (var i = 0; i < checkBoxGroupNames.length; i++) {
        checkedChkBoxes = [];
    
        $.each($("input[name=" + checkBoxGroupNames[i] + "]:checked"), function(){
            checkedChkBoxes.push($(this).val());
        });
    
        items.push(checkedChkBoxes);
    }
    
    console.log(items); // items now holds the two dimension array
    

    对于更干净的代码,您可以将查找每组复选框的逻辑放在函数中。

    var checkBoxGroupNames = ['checkboxColors1', 'checkboxColors2'];
    var items = [];
    
    $.each(checkBoxGroupNames, function(){
      items.push(GetCheckedChkBoxes(this));
    });
    
    console.log(items); // items now holds the two dimension array
    
    function GetCheckedChkBoxes(chkBoxGroupName) {
      checkedChkBoxes = [];
    
      $.each($("input[name=" + chkBoxGroupName + "]:checked"), function(){
        checkedChkBoxes.push($(this).val());
      });
    
      return checkedChkBoxes;
    }