You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript向多维数组动态添加值时报items[1]未定义错误

问题分析与解决方案

嘿,我来帮你搞定这个报错问题~

问题根源

你初始化数组的时候写了 var items = [[]];,这意味着items数组里只有一个空的子数组(索引为0),而items[1]这个位置根本就不存在——它的值是undefined,所以当你尝试调用items[1].push()时,自然会抛出TypeError: items[1] is undefined的错误。

对比你最开始的静态数组:

var items = [ ["red", "blue"], ["green", "yellow"] ];

这里items明确包含了两个子数组,索引0和1都是有效的数组对象,所以访问items[1][1]没问题。但动态初始化时你只创建了第一个子数组,第二个子数组缺失了。

修复方案

这里有几种简单的修复方式,你可以根据需求选择:

方案1:提前初始化所有需要的子数组

如果你确定只会有2组复选框,直接在初始化时就创建两个空数组:

var items = [[], []]; // 现在items[0]和items[1]都是有效的空数组

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

这样两个push操作都能正常执行,不会再报错。

方案2:动态创建缺失的子数组

如果不确定需要多少组,或者想更灵活,可以在操作前检查并创建对应的子数组:

var items = [[]];

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

// 先检查items[1]是否存在,不存在就创建一个空数组
if (!items[1]) {
  items[1] = [];
}
$.each($("input[name='checkboxColors2']:checked"), function(){
    items[1].push($(this).val());
});

方案3:用循环简化多组逻辑(推荐)

如果后续可能增加更多组复选框(比如checkboxColors3、checkboxColors4),用循环来处理会更简洁,避免重复代码:

var items = [];
// 假设我们有2组复选框,可根据实际数量修改循环次数
for (var i = 1; i <= 2; i++) {
  var currentGroup = [];
  // 动态拼接选择器字符串
  $.each($("input[name='checkboxColors" + i + "']:checked"), function(){
      currentGroup.push($(this).val());
  });
  items.push(currentGroup);
}

这样不管有多少组,只需要调整循环次数就能轻松适配,代码也更易维护。

内容的提问来源于stack exchange,提问作者Trombone0904

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:14:15