Javascript 向多维数组添加值

Javascript 向多维数组添加值,javascript,arrays,Javascript,Arrays,我有一个javascript代码,它生成一个带有静态值的多数组: var items = [ ["red", "blue"], ["green", "yellow"] ]; console.log(items[1][1]); // green 但是现在我想动态地填充这些值。 我试过这个: var items = [[]]; $.each($("input[name='checkboxColors1']:checked"), function(){ items[0]

我有一个javascript代码,它生成一个带有静态值的多数组:

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]未定义


我的错在哪里?

Javascript是异步的。。。不能期望两个函数按顺序执行…:-)

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

var items = [ [], [] ];
自从

var items = [[]];

在外部数组中只定义一个内部数组(
items[0]
),但需要两个(
items[0]
items[1]
)。

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

var items = [ [], [] ];
自从

var items = [[]];

您只在外部数组中定义一个内部数组(
items[0]
),但需要两个(
items[0]
items[1]
)。

var items=[]您的问题在这里

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


或者,为了使其更具动态性,您可以在$之前进行检查。如果项目[1]存在,则检查每个项目,如果没有,则创建它

var items=[[]您的问题在这里

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


或者,为了使其更具动态性,您可以在$之前进行检查。如果项目[1]存在,并且如果没有创建它,则无法推入未定义的数组,您首先需要创建数组

您的代码必须如下所示:

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

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

然后它应该可以正常工作。

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

您的代码必须如下所示:

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

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

然后它应该能正常工作。

我想你对“推”功能感到困惑。 此函数用于在数组的最后一个位置插入新元素

比如说

var items = ["grape"];
items.push("apple"); 
console.log(items); //["grape", "apple"].

我想你对“推”功能感到困惑。 此函数用于在数组的最后一个位置插入新元素

比如说

var items = ["grape"];
items.push("apple"); 
console.log(items); //["grape", "apple"].

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

var items=new Array();
项目[0]=1;
项目[1]=2;

控制台日志(项目)通过创建数组对象并动态赋值来实现此目的的最佳方法。通过这种方式,您还可以定义字符串键。请参见下面的内容

var items=new Array();
项目[0]=1;
项目[1]=2;

控制台日志(项目)当您将静态多维数组与动态添加元素的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

当您将静态多维数组与使用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项目=[]]然后
项[1]
未定义的
。你不能
推入未定义,你需要先创建数组。我在下面为你写了一个完整的工作代码,作为回答,如果
var items=[[],请告诉我它是否对你有效然后
项[1]
未定义的
。你不能
推入未定义,你需要先创建数组。我在下面为你写了一个完整的工作代码,作为回答,让我知道它是否适用于你这其中哪部分是异步的?它只是同步地循环输入。javascript本质上不是异步的。按顺序调用的两个函数将按顺序执行。JS是异步的这一事实与此问题无关。@Suxino:你是对的,但对于问题的第一个版本…:-)所有javascript都是异步的。。。您定义的两个匿名函数将按未定义的顺序执行。。。但是,正如@Suxino所指出的,如果您像当前一样填充两个difefrent变量(items[0]和items[1]),那么您可能会忘记异步性。。。如果像问题的第一次修订一样,填充一个数组,可以找到一个未定义的元素……函数将按照调用顺序执行。如果函数作为回调传递给异步操作,那么将来将调用它。说
所有javascript都是异步的是完全错误的?它只是同步地循环输入。javascript本质上不是异步的。按顺序调用的两个函数将按顺序执行。JS是异步的这一事实与此问题无关。@Suxino:你是对的,但对于问题的第一个版本…:-)所有javascript都是异步的。。。您定义的两个匿名函数将按未定义的顺序执行。。。但是,正如@Suxino所指出的,如果您像当前一样填充两个difefrent变量(items[0]和items[1]),那么您可能会忘记异步性。。。如果像问题的第一次修订一样,填充一个数组,可以找到一个未定义的元素……函数将按照调用顺序执行。如果函数作为回调传递给异步操作,那么将来将调用它。如果说
所有javascript都是异步的,
@Mark Meyer刚刚编辑了我的答案,那么这完全是错误的。现在我已经共享了示例代码的代码片段。@MarkMeyer您检查过了吗?这不再是抛出错误,但它不符合OP的要求。他们希望
items[0]
items[1]
成为数组,因此标题
多维数组
@Mark Meyer刚刚编辑了我的答案,现在我已经共享了示例代码的代码片段。@MarkMeyer检查过了吗?这不再是抛出错误,但它不符合OP的要求。他们想要
项目[0]