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

使用for循环无法将二维数组元素复制到另一个数组?这段JavaScript代码存在什么问题?

问题分析与解决

这个错误的根源很明确:你初始化的arr是一个空数组,当尝试给arr[i][j]赋值时,arr[i]还没有被定义为数组——它是undefined,自然没法给undefined的子属性(也就是子数组的元素)赋值。

为什么一维数组没问题?

处理一维数组时,你是直接给arr[i]赋值单个值(比如arr[i] = someValue),这时候JavaScript会自动扩展数组长度并完成赋值。但二维数组不一样,arr[i]本身得是一个数组,你才能往它里面塞arr[i][j]这类元素。

修正后的for循环代码

你只需要在外层循环里,先给当前行的arr[i]初始化一个空数组,再进行内层循环赋值:

let matrix1 = [ [2, 7, 9, 2], [8, 0, 7, 1], [8, 8, 0, 8] ];
let arr = [];
for (let i = 0; i < matrix1.length; i++) {
  arr[i] = []; // 关键步骤:先创建当前行的子数组
  for (let j = 0; j < matrix1[i].length; j++) {
    arr[i][j] = matrix1[i][j];
  }
}
console.log(arr);

额外优化:更简洁的复制方式

如果不想写嵌套循环,也可以直接复制每一行的数组(比如用扩展运算符或者slice()),效果完全一致:

let matrix1 = [ [2, 7, 9, 2], [8, 0, 7, 1], [8, 8, 0, 8] ];
let arr = [];
for (let i = 0; i < matrix1.length; i++) {
  arr[i] = [...matrix1[i]]; // 或者 matrix1[i].slice()
}
console.log(arr);

为什么arr = [[]]也不行?

你注释里提到的arr = [[]]只初始化了第一行的空数组,当循环到i=1时,arr[1]还是undefined,同样会触发相同的错误。必须保证每一行的子数组都被单独初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:58:09