不规则二维数组的核心特点是每行长度可不同;javascript中可用嵌套字面量或动态push创建,避免array(n).fill([])陷阱;python中天然支持列表套列表,可直接定义、append或推导式构建;访问时须检查边界以防越界。

不规则二维数组的核心特点是:每一行(子数组)的长度可以不同。它不像表格那样整齐,更贴近真实场景中“每组数据条数不一”的需求,比如学生成绩表里有人选3门课、有人选5门课;或菜单分类下各品类商品数量不等。
JavaScript 中创建不规则二维数组
直接用数组字面量嵌套即可,无需预先设定统一长度:
- 手动写入:最直观,适合小规模、已知结构的数据
const menu = [ ["汉堡", "薯条"], ["咖啡", "奶茶", "果汁", "冰茶"], ["蛋糕"] ]; - 动态追加:逐行 push 不同长度的一维数组
const groups = []; groups.push([1, 2]); groups.push([3, 4, 5, 6]); groups.push([7]); - 避免常见陷阱:不要用
Array(3).fill([]),否则所有行引用同一个空数组,改一行会影响全部
Python 中创建不规则二维数组
本质是列表套列表,天然支持长度不一:
- 直接定义:
data = [[1, 2], [3, 4, 5], [6, 7, 8, 9]] - 逐步构建:先建空列表,再用
append()加入不同长度的子列表records = []<br>records.append(["张三", "语文", "数学"])<br>records.append(["李四", "英语"])<br>records.append(["王五", "物理", "化学", "生物", "地理"])
- 读取用户输入时也很自然:
n = int(input())<br>irregular = [list(map(int, input().split())) for _ in range(n)]
(每行输入数字个数可变)
访问和遍历时的关键注意点
因为行长度不固定,不能假设 arr[i][j] 总有值,访问前建议检查边界:
- JavaScript 中:
if (i - Python 中:
if i - 遍历推荐用增强型循环(如 JS 的
for...of或 Python 的for row in arr),天然避开列索引越界问题
什么时候该用不规则二维数组
它不是“不规范”,而是更贴合实际数据形态:
- 树形结构的扁平化表示(如每个节点的子节点列表)
- 分组聚合结果(如按城市统计订单,每个城市订单数不同)
- 稀疏矩阵的简化存储(只存非零行,跳过全零行)
- 前端表单中动态增删的字段组(如多组联系人信息)











