Javascript 向多维数组添加值
我有一个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]
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]
和