在 JavaScript 中,生成二维数组有多种方法。以下是一些常见的基础概念、类型、应用场景以及示例代码:
二维数组可以看作是一个数组的数组,即每个元素都是一个数组。它在处理表格数据、矩阵运算等场景中非常有用。
// 定义一个 3x3 的静态二维数组
const matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
console.log(matrix);
// 动态生成一个 m x n 的二维数组,并初始化为 0
function createMatrix(m, n) {
const matrix = new Array(m);
for (let i = 0; i < m; i++) {
matrix[i] = new Array(n).fill(0);
}
return matrix;
}
const rows = 3;
const cols = 4;
const dynamicMatrix = createMatrix(rows, cols);
console.log(dynamicMatrix);
// 使用 Array.from 生成一个 m x n 的二维数组,并初始化为 0
const rows = 3;
const cols = 4;
const matrixFrom = Array.from({ length: rows }, () => Array.from({ length: cols }, () => 0));
console.log(matrixFrom);
原因:在动态生成二维数组时,如果直接使用 new Array(m * n).fill(0)
,会导致所有子数组引用同一个数组对象。
解决方法:使用嵌套循环或 Array.from
来确保每个子数组是独立的。
// 错误示例
const wrongMatrix = new Array(3).fill(new Array(4).fill(0));
wrongMatrix[0][0] = 1;
console.log(wrongMatrix); // 所有子数组的第一个元素都会变成 1
// 正确示例
const correctMatrix = createMatrix(3, 4);
correctMatrix[0][0] = 1;
console.log(correctMatrix); // 只有第一个子数组的第一个元素变成 1
原因:在遍历二维数组时,需要注意嵌套循环的使用。
解决方法:使用嵌套的 for
循环或 forEach
方法来遍历。
// 使用嵌套 for 循环遍历
for (let i = 0; i < matrix.length; i++) {
for (let j = 0; j < matrix[i].length; j++) {
console.log(`matrix[${i}][${j}] = ${matrix[i][j]}`);
}
}
// 使用 forEach 遍历
matrix.forEach((row, i) => {
row.forEach((value, j) => {
console.log(`matrix[${i}][${j}] = ${value}`);
});
});
通过以上方法,你可以灵活地生成和操作二维数组,解决各种实际开发中的问题。